@fncts/io 0.0.8 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- package/Channel/api.d.ts +27 -4
- package/Channel/internal/MergeDecision.d.ts +14 -0
- package/IO/api/onTermination.d.ts +9 -0
- package/IO.d.ts +1 -0
- package/STM/api.d.ts +7 -0
- package/Sink/api.d.ts +637 -8
- package/TReentrantLock/api.d.ts +97 -0
- package/TReentrantLock/definition.d.ts +65 -0
- package/TReentrantLock.d.ts +2 -0
- package/_cjs/Cached/api.cjs +5 -5
- package/_cjs/Cached/api.cjs.map +1 -1
- package/_cjs/Channel/api/mapOutIOC.cjs +9 -9
- package/_cjs/Channel/api/mapOutIOC.cjs.map +1 -1
- package/_cjs/Channel/api/mergeAllWith.cjs +18 -18
- package/_cjs/Channel/api/mergeAllWith.cjs.map +1 -1
- package/_cjs/Channel/api/mergeWith.cjs +5 -5
- package/_cjs/Channel/api/mergeWith.cjs.map +1 -1
- package/_cjs/Channel/api/run.cjs +3 -3
- package/_cjs/Channel/api/runCollect.cjs +3 -3
- package/_cjs/Channel/api/runDrain.cjs +3 -3
- package/_cjs/Channel/api.cjs +90 -35
- package/_cjs/Channel/api.cjs.map +1 -1
- package/_cjs/Channel/internal/ChannelExecutor.cjs +16 -16
- package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
- package/_cjs/Channel/internal/MergeDecision.cjs +11 -2
- package/_cjs/Channel/internal/MergeDecision.cjs.map +1 -1
- package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs +20 -20
- package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs.map +1 -1
- package/_cjs/Fiber/api/awaitAll.cjs +1 -1
- package/_cjs/Fiber/api/awaitAll.cjs.map +1 -1
- package/_cjs/Fiber/api/fromIO.cjs +1 -1
- package/_cjs/Fiber/api/fromIO.cjs.map +1 -1
- package/_cjs/Fiber/api/interruptFork.cjs +3 -3
- package/_cjs/Fiber/api/interruptFork.cjs.map +1 -1
- package/_cjs/Fiber/api/zipWith.cjs +1 -1
- package/_cjs/Fiber/api/zipWith.cjs.map +1 -1
- package/_cjs/FiberRef/api/locallyScoped.cjs +3 -3
- package/_cjs/FiberRef/api/locallyScoped.cjs.map +1 -1
- package/_cjs/FiberRef/constructors.cjs +1 -1
- package/_cjs/FiberRef/constructors.cjs.map +1 -1
- package/_cjs/Future/api.cjs +1 -1
- package/_cjs/Future/api.cjs.map +1 -1
- package/_cjs/Hub/internal.cjs +1 -1
- package/_cjs/Hub/internal.cjs.map +1 -1
- package/_cjs/IO/api/asyncIO.cjs +4 -4
- package/_cjs/IO/api/asyncIO.cjs.map +1 -1
- package/_cjs/IO/api/bracketExit.cjs +1 -1
- package/_cjs/IO/api/bracketExit.cjs.map +1 -1
- package/_cjs/IO/api/environment.cjs +5 -5
- package/_cjs/IO/api/environment.cjs.map +1 -1
- package/_cjs/IO/api/foreachC.cjs +3 -3
- package/_cjs/IO/api/foreachC.cjs.map +1 -1
- package/_cjs/IO/api/foreachExec.cjs +3 -3
- package/_cjs/IO/api/foreachExec.cjs.map +1 -1
- package/_cjs/IO/api/forkAll.cjs +1 -1
- package/_cjs/IO/api/forkAll.cjs.map +1 -1
- package/_cjs/IO/api/forkIn.cjs +1 -1
- package/_cjs/IO/api/forkIn.cjs.map +1 -1
- package/_cjs/IO/api/forkScoped.cjs +1 -1
- package/_cjs/IO/api/forkScoped.cjs.map +1 -1
- package/_cjs/IO/api/fulfill.cjs +1 -1
- package/_cjs/IO/api/fulfill.cjs.map +1 -1
- package/_cjs/IO/api/interrupt.cjs +4 -4
- package/_cjs/IO/api/interrupt.cjs.map +1 -1
- package/_cjs/IO/api/memoize.cjs +4 -4
- package/_cjs/IO/api/memoize.cjs.map +1 -1
- package/_cjs/IO/api/onTermination.cjs +28 -0
- package/_cjs/IO/api/onTermination.cjs.map +1 -0
- package/_cjs/IO/api/raceFirst.cjs +1 -1
- package/_cjs/IO/api/raceFirst.cjs.map +1 -1
- package/_cjs/IO/api/repeat.cjs +2 -2
- package/_cjs/IO/api/repeat.cjs.map +1 -1
- package/_cjs/IO/api/retry.cjs +2 -2
- package/_cjs/IO/api/retry.cjs.map +1 -1
- package/_cjs/IO/api/schedule.cjs +2 -2
- package/_cjs/IO/api/schedule.cjs.map +1 -1
- package/_cjs/IO/api/timeout.cjs +3 -3
- package/_cjs/IO/api/timeout.cjs.map +1 -1
- package/_cjs/IO/api/zipC.cjs +5 -5
- package/_cjs/IO/api/zipC.cjs.map +1 -1
- package/_cjs/IO/api.cjs +4 -4
- package/_cjs/IO/api.cjs.map +1 -1
- package/_cjs/IO.cjs +13 -0
- package/_cjs/IO.cjs.map +1 -1
- package/_cjs/Layer/MemoMap.cjs +24 -24
- package/_cjs/Layer/MemoMap.cjs.map +1 -1
- package/_cjs/Layer/api.cjs +4 -4
- package/_cjs/Layer/api.cjs.map +1 -1
- package/_cjs/Ref/DerivedAll.cjs +1 -1
- package/_cjs/Ref/DerivedAll.cjs.map +1 -1
- package/_cjs/Ref/Synchronized/api.cjs +3 -3
- package/_cjs/Ref/Synchronized/api.cjs.map +1 -1
- package/_cjs/Ref/Synchronized/constructors.cjs +3 -3
- package/_cjs/Ref/Synchronized/constructors.cjs.map +1 -1
- package/_cjs/Ref/Synchronized/definition.cjs +3 -3
- package/_cjs/Ref/Synchronized/definition.cjs.map +1 -1
- package/_cjs/Ref/api/modify.cjs +10 -10
- package/_cjs/Ref/api/modify.cjs.map +1 -1
- package/_cjs/STM/api.cjs +15 -6
- package/_cjs/STM/api.cjs.map +1 -1
- package/_cjs/Scope/ReleaseMap/api/releaseAll.cjs +1 -1
- package/_cjs/Scope/ReleaseMap/api/releaseAll.cjs.map +1 -1
- package/_cjs/Scope/ReleaseMap/api.cjs +13 -13
- package/_cjs/Scope/ReleaseMap/api.cjs.map +1 -1
- package/_cjs/ScopedRef/api.cjs +1 -1
- package/_cjs/ScopedRef/api.cjs.map +1 -1
- package/_cjs/Sink/api.cjs +1475 -42
- package/_cjs/Sink/api.cjs.map +1 -1
- package/_cjs/Stream/api.cjs +42 -42
- package/_cjs/Stream/api.cjs.map +1 -1
- package/_cjs/TReentrantLock/api.cjs +297 -0
- package/_cjs/TReentrantLock/api.cjs.map +1 -0
- package/_cjs/TReentrantLock/definition.cjs +125 -0
- package/_cjs/TReentrantLock/definition.cjs.map +1 -0
- package/_cjs/TReentrantLock.cjs +32 -0
- package/_cjs/TReentrantLock.cjs.map +1 -0
- package/_cjs/TRef/api.cjs +7 -7
- package/_cjs/TRef/api.cjs.map +1 -1
- package/_cjs/collection/immutable/Conc/dropUntilIO.cjs +38 -0
- package/_cjs/collection/immutable/Conc/dropUntilIO.cjs.map +1 -0
- package/_cjs/collection/immutable/Conc/dropWhileIO.cjs +38 -0
- package/_cjs/collection/immutable/Conc/dropWhileIO.cjs.map +1 -0
- package/_cjs/collection/immutable/Conc/filterIO.cjs +35 -0
- package/_cjs/collection/immutable/Conc/filterIO.cjs.map +1 -0
- package/_cjs/collection/immutable/Conc.cjs +13 -0
- package/_cjs/collection/immutable/Conc.cjs.map +1 -1
- package/_cjs/data/Exit/foreachIO.cjs +1 -1
- package/_cjs/data/Exit/foreachIO.cjs.map +1 -1
- package/_mjs/Cached/api.mjs +5 -5
- package/_mjs/Cached/api.mjs.map +1 -1
- package/_mjs/Channel/api/mapOutIOC.mjs +9 -9
- package/_mjs/Channel/api/mapOutIOC.mjs.map +1 -1
- package/_mjs/Channel/api/mergeAllWith.mjs +18 -18
- package/_mjs/Channel/api/mergeAllWith.mjs.map +1 -1
- package/_mjs/Channel/api/mergeWith.mjs +5 -5
- package/_mjs/Channel/api/mergeWith.mjs.map +1 -1
- package/_mjs/Channel/api/run.mjs +3 -3
- package/_mjs/Channel/api/runCollect.mjs +3 -3
- package/_mjs/Channel/api/runDrain.mjs +3 -3
- package/_mjs/Channel/api.mjs +78 -33
- package/_mjs/Channel/api.mjs.map +1 -1
- package/_mjs/Channel/internal/ChannelExecutor.mjs +16 -16
- package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
- package/_mjs/Channel/internal/MergeDecision.mjs +7 -0
- package/_mjs/Channel/internal/MergeDecision.mjs.map +1 -1
- package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs +20 -20
- package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs.map +1 -1
- package/_mjs/Fiber/api/awaitAll.mjs +1 -1
- package/_mjs/Fiber/api/awaitAll.mjs.map +1 -1
- package/_mjs/Fiber/api/fromIO.mjs +1 -1
- package/_mjs/Fiber/api/fromIO.mjs.map +1 -1
- package/_mjs/Fiber/api/interruptFork.mjs +3 -3
- package/_mjs/Fiber/api/interruptFork.mjs.map +1 -1
- package/_mjs/Fiber/api/zipWith.mjs +1 -1
- package/_mjs/Fiber/api/zipWith.mjs.map +1 -1
- package/_mjs/FiberRef/api/locallyScoped.mjs +3 -3
- package/_mjs/FiberRef/api/locallyScoped.mjs.map +1 -1
- package/_mjs/FiberRef/constructors.mjs +1 -1
- package/_mjs/FiberRef/constructors.mjs.map +1 -1
- package/_mjs/Future/api.mjs +1 -1
- package/_mjs/Future/api.mjs.map +1 -1
- package/_mjs/Hub/internal.mjs +1 -1
- package/_mjs/Hub/internal.mjs.map +1 -1
- package/_mjs/IO/api/asyncIO.mjs +4 -4
- package/_mjs/IO/api/asyncIO.mjs.map +1 -1
- package/_mjs/IO/api/bracketExit.mjs +1 -1
- package/_mjs/IO/api/bracketExit.mjs.map +1 -1
- package/_mjs/IO/api/environment.mjs +5 -5
- package/_mjs/IO/api/environment.mjs.map +1 -1
- package/_mjs/IO/api/foreachC.mjs +3 -3
- package/_mjs/IO/api/foreachC.mjs.map +1 -1
- package/_mjs/IO/api/foreachExec.mjs +3 -3
- package/_mjs/IO/api/foreachExec.mjs.map +1 -1
- package/_mjs/IO/api/forkAll.mjs +1 -1
- package/_mjs/IO/api/forkAll.mjs.map +1 -1
- package/_mjs/IO/api/forkIn.mjs +1 -1
- package/_mjs/IO/api/forkIn.mjs.map +1 -1
- package/_mjs/IO/api/forkScoped.mjs +1 -1
- package/_mjs/IO/api/forkScoped.mjs.map +1 -1
- package/_mjs/IO/api/fulfill.mjs +1 -1
- package/_mjs/IO/api/fulfill.mjs.map +1 -1
- package/_mjs/IO/api/interrupt.mjs +4 -4
- package/_mjs/IO/api/interrupt.mjs.map +1 -1
- package/_mjs/IO/api/memoize.mjs +4 -4
- package/_mjs/IO/api/memoize.mjs.map +1 -1
- package/_mjs/IO/api/onTermination.mjs +13 -0
- package/_mjs/IO/api/onTermination.mjs.map +1 -0
- package/_mjs/IO/api/raceFirst.mjs +1 -1
- package/_mjs/IO/api/raceFirst.mjs.map +1 -1
- package/_mjs/IO/api/repeat.mjs +2 -2
- package/_mjs/IO/api/repeat.mjs.map +1 -1
- package/_mjs/IO/api/retry.mjs +2 -2
- package/_mjs/IO/api/retry.mjs.map +1 -1
- package/_mjs/IO/api/schedule.mjs +2 -2
- package/_mjs/IO/api/schedule.mjs.map +1 -1
- package/_mjs/IO/api/timeout.mjs +3 -3
- package/_mjs/IO/api/timeout.mjs.map +1 -1
- package/_mjs/IO/api/zipC.mjs +5 -5
- package/_mjs/IO/api/zipC.mjs.map +1 -1
- package/_mjs/IO/api.mjs +4 -4
- package/_mjs/IO/api.mjs.map +1 -1
- package/_mjs/IO.mjs +1 -0
- package/_mjs/IO.mjs.map +1 -1
- package/_mjs/Layer/MemoMap.mjs +24 -24
- package/_mjs/Layer/MemoMap.mjs.map +1 -1
- package/_mjs/Layer/api.mjs +4 -4
- package/_mjs/Layer/api.mjs.map +1 -1
- package/_mjs/Ref/DerivedAll.mjs +1 -1
- package/_mjs/Ref/DerivedAll.mjs.map +1 -1
- package/_mjs/Ref/Synchronized/api.mjs +3 -3
- package/_mjs/Ref/Synchronized/api.mjs.map +1 -1
- package/_mjs/Ref/Synchronized/constructors.mjs +3 -3
- package/_mjs/Ref/Synchronized/constructors.mjs.map +1 -1
- package/_mjs/Ref/Synchronized/definition.mjs +3 -3
- package/_mjs/Ref/Synchronized/definition.mjs.map +1 -1
- package/_mjs/Ref/api/modify.mjs +10 -10
- package/_mjs/Ref/api/modify.mjs.map +1 -1
- package/_mjs/STM/api.mjs +13 -6
- package/_mjs/STM/api.mjs.map +1 -1
- package/_mjs/Scope/ReleaseMap/api/releaseAll.mjs +1 -1
- package/_mjs/Scope/ReleaseMap/api/releaseAll.mjs.map +1 -1
- package/_mjs/Scope/ReleaseMap/api.mjs +13 -13
- package/_mjs/Scope/ReleaseMap/api.mjs.map +1 -1
- package/_mjs/ScopedRef/api.mjs +1 -1
- package/_mjs/ScopedRef/api.mjs.map +1 -1
- package/_mjs/Sink/api.mjs +1287 -37
- package/_mjs/Sink/api.mjs.map +1 -1
- package/_mjs/Stream/api.mjs +42 -42
- package/_mjs/Stream/api.mjs.map +1 -1
- package/_mjs/TReentrantLock/api.mjs +243 -0
- package/_mjs/TReentrantLock/api.mjs.map +1 -0
- package/_mjs/TReentrantLock/definition.mjs +102 -0
- package/_mjs/TReentrantLock/definition.mjs.map +1 -0
- package/_mjs/TReentrantLock.mjs +4 -0
- package/_mjs/TReentrantLock.mjs.map +1 -0
- package/_mjs/TRef/api.mjs +7 -7
- package/_mjs/TRef/api.mjs.map +1 -1
- package/_mjs/collection/immutable/Conc/dropUntilIO.mjs +26 -0
- package/_mjs/collection/immutable/Conc/dropUntilIO.mjs.map +1 -0
- package/_mjs/collection/immutable/Conc/dropWhileIO.mjs +26 -0
- package/_mjs/collection/immutable/Conc/dropWhileIO.mjs.map +1 -0
- package/_mjs/collection/immutable/Conc/filterIO.mjs +22 -0
- package/_mjs/collection/immutable/Conc/filterIO.mjs.map +1 -0
- package/_mjs/collection/immutable/Conc.mjs +1 -0
- package/_mjs/collection/immutable/Conc.mjs.map +1 -1
- package/_mjs/data/Exit/foreachIO.mjs +1 -1
- package/_mjs/data/Exit/foreachIO.mjs.map +1 -1
- package/_src/Channel/api.ts +98 -11
- package/_src/Channel/internal/MergeDecision.ts +15 -0
- package/_src/IO/api/onTermination.ts +17 -0
- package/_src/IO/api.ts +1 -1
- package/_src/IO.ts +1 -0
- package/_src/STM/api.ts +9 -0
- package/_src/Sink/api.ts +1725 -36
- package/_src/TFuture/definition.ts +1 -1
- package/_src/TReentrantLock/api.ts +193 -0
- package/_src/TReentrantLock/definition.ts +86 -0
- package/_src/TReentrantLock.ts +4 -0
- package/_src/collection/immutable/Conc/dropUntilIO.ts +24 -0
- package/_src/collection/immutable/Conc/dropWhileIO.ts +26 -0
- package/_src/collection/immutable/Conc/filterIO.ts +16 -0
- package/_src/collection/immutable/Conc.ts +1 -0
- package/collection/immutable/Conc/dropUntilIO.d.ts +7 -0
- package/collection/immutable/Conc/dropWhileIO.d.ts +7 -0
- package/collection/immutable/Conc/filterIO.d.ts +7 -0
- package/collection/immutable/Conc.d.ts +1 -0
- package/package.json +3 -3
package/_cjs/Sink/api.cjs
CHANGED
@@ -3,100 +3,1533 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
+
exports.apFirst = apFirst;
|
7
|
+
exports.apFirstC = apFirstC;
|
8
|
+
exports.apSecond = apSecond;
|
9
|
+
exports.apSecondC = apSecondC;
|
10
|
+
exports.as = as;
|
6
11
|
exports.collectAll = collectAll;
|
12
|
+
exports.collectAllWhileWith = void 0;
|
13
|
+
exports.collectLeftover = collectLeftover;
|
14
|
+
exports.defer = exports.contramapIO = exports.contramapChunksIO = exports.contramapChunks = exports.contramap = void 0;
|
15
|
+
exports.dimap = dimap;
|
16
|
+
exports.dimapChunks = dimapChunks;
|
17
|
+
exports.dimapChunksIO = dimapChunksIO;
|
18
|
+
exports.dimapIO = dimapIO;
|
7
19
|
exports.drain = void 0;
|
8
|
-
exports.
|
9
|
-
exports.
|
10
|
-
exports.
|
20
|
+
exports.dropWhileIO = dropWhileIO;
|
21
|
+
exports.environment = environment;
|
22
|
+
exports.environmentWith = environmentWith;
|
23
|
+
exports.environmentWithIO = environmentWithIO;
|
24
|
+
exports.environmentWithSink = environmentWithSink;
|
25
|
+
exports.fail = fail;
|
26
|
+
exports.failNow = exports.failCauseNow = exports.failCause = void 0;
|
27
|
+
exports.filterInput = filterInput;
|
28
|
+
exports.filterInputIO = filterInputIO;
|
29
|
+
exports.findIO = findIO;
|
30
|
+
exports.flatMap = void 0;
|
31
|
+
exports.fromChannel = fromChannel;
|
32
|
+
exports.fromHub = fromHub;
|
33
|
+
exports.fromHubWithShutdown = fromHubWithShutdown;
|
34
|
+
exports.fromIO = void 0;
|
35
|
+
exports.fromPush = fromPush;
|
36
|
+
exports.fromQueueWithShutdown = exports.fromQueue = void 0;
|
37
|
+
exports.halt = halt;
|
38
|
+
exports.haltNow = haltNow;
|
39
|
+
exports.head = head;
|
40
|
+
exports.ignoreLeftover = void 0;
|
41
|
+
exports.last = last;
|
42
|
+
exports.leftover = leftover;
|
43
|
+
exports.log = log;
|
44
|
+
exports.makeCollectAll = makeCollectAll;
|
45
|
+
exports.makeCollectAllN = makeCollectAllN;
|
46
|
+
exports.makeDropUntil = makeDropUntil;
|
47
|
+
exports.makeDropUntilIO = makeDropUntilIO;
|
48
|
+
exports.makeDropWhile = makeDropWhile;
|
49
|
+
exports.makeFoldLeft = exports.makeFoldIO = exports.makeFoldChunksIO = exports.makeFoldChunks = exports.makeFold = void 0;
|
50
|
+
exports.makeFoldLeftChunks = makeFoldLeftChunks;
|
51
|
+
exports.makeFoldLeftChunksIO = makeFoldLeftChunksIO;
|
52
|
+
exports.makeFoldLeftIO = makeFoldLeftIO;
|
53
|
+
exports.makeFoldUntil = void 0;
|
54
|
+
exports.makeFoldUntilIO = makeFoldUntilIO;
|
55
|
+
exports.makeFoldWeighted = makeFoldWeighted;
|
56
|
+
exports.makeFoldWeightedDecomposeIO = exports.makeFoldWeightedDecompose = void 0;
|
57
|
+
exports.makeFoldWeightedIO = makeFoldWeightedIO;
|
58
|
+
exports.makeForeach = makeForeach;
|
59
|
+
exports.makeForeachChunk = void 0;
|
60
|
+
exports.makeForeachChunkWhile = makeForeachChunkWhile;
|
61
|
+
exports.makeForeachWhile = void 0;
|
62
|
+
exports.mapError_ = mapError_;
|
63
|
+
exports.matchSink_ = exports.map_ = exports.mapIO_ = void 0;
|
64
|
+
exports.orElse = orElse;
|
65
|
+
exports.provideEnvironment = provideEnvironment;
|
66
|
+
exports.race = race;
|
67
|
+
exports.raceWith = exports.raceBoth = void 0;
|
68
|
+
exports.service = service;
|
69
|
+
exports.serviceWith = void 0;
|
70
|
+
exports.serviceWithIO = serviceWithIO;
|
71
|
+
exports.serviceWithSink = serviceWithSink;
|
72
|
+
exports.splitWhere = splitWhere;
|
73
|
+
exports.succeed = succeed;
|
74
|
+
exports.succeedNow = succeedNow;
|
75
|
+
exports.summarized = void 0;
|
76
|
+
exports.timed = timed;
|
77
|
+
exports.unwrapScoped = exports.unwrap = void 0;
|
78
|
+
exports.zip = zip;
|
79
|
+
exports.zipC = zipC;
|
80
|
+
exports.zipWithC = exports.zipWith = void 0;
|
11
81
|
|
12
|
-
var tsplus_module_1 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/Conc/api"));
|
82
|
+
var tsplus_module_1 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/Conc/api/empty"));
|
13
83
|
|
14
|
-
var tsplus_module_2 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/
|
84
|
+
var tsplus_module_2 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/Conc/api"));
|
15
85
|
|
16
|
-
var tsplus_module_3 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/
|
86
|
+
var tsplus_module_3 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Sink/definition"));
|
17
87
|
|
18
|
-
var tsplus_module_4 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/
|
88
|
+
var tsplus_module_4 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Channel/api"));
|
19
89
|
|
20
|
-
var tsplus_module_5 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/
|
90
|
+
var tsplus_module_5 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Channel/core-api"));
|
21
91
|
|
22
|
-
var tsplus_module_6 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/
|
92
|
+
var tsplus_module_6 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Ref/api/set"));
|
93
|
+
|
94
|
+
var tsplus_module_7 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Ref/api/get"));
|
95
|
+
|
96
|
+
var tsplus_module_8 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Ref/constructors"));
|
97
|
+
|
98
|
+
var tsplus_module_9 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/IO/api"));
|
99
|
+
|
100
|
+
var tsplus_module_10 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/collection/immutable/Conc/mapIO"));
|
101
|
+
|
102
|
+
var tsplus_module_11 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/collection/immutable/Conc/dropUntilIO"));
|
103
|
+
|
104
|
+
var tsplus_module_12 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/collection/immutable/Conc/dropWhileIO"));
|
105
|
+
|
106
|
+
var tsplus_module_13 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/IO/api/environment"));
|
107
|
+
|
108
|
+
var tsplus_module_14 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/function/api"));
|
109
|
+
|
110
|
+
var tsplus_module_15 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/collection/immutable/Conc/filterIO"));
|
111
|
+
|
112
|
+
var tsplus_module_16 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Maybe/constructors"));
|
113
|
+
|
114
|
+
var tsplus_module_17 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Either/destructors"));
|
115
|
+
|
116
|
+
var tsplus_module_18 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Queue/api/operations"));
|
117
|
+
|
118
|
+
var tsplus_module_19 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/IO/api/acquireRelease"));
|
119
|
+
|
120
|
+
var tsplus_module_20 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Cause/api"));
|
121
|
+
|
122
|
+
var tsplus_module_21 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Maybe/definition"));
|
123
|
+
|
124
|
+
var tsplus_module_22 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Maybe/destructors"));
|
125
|
+
|
126
|
+
var tsplus_module_23 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/Conc"));
|
127
|
+
|
128
|
+
var tsplus_module_24 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/Conc/constructors"));
|
129
|
+
|
130
|
+
var tsplus_module_25 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Either/api"));
|
131
|
+
|
132
|
+
var tsplus_module_26 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Either/constructors"));
|
133
|
+
|
134
|
+
var tsplus_module_27 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Channel/internal/MergeDecision"));
|
135
|
+
|
136
|
+
var tsplus_module_28 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Channel/api/mergeWith"));
|
137
|
+
|
138
|
+
var tsplus_module_29 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Hub/api"));
|
139
|
+
|
140
|
+
var tsplus_module_30 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/Iterable/api"));
|
141
|
+
|
142
|
+
var tsplus_module_31 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Clock/api"));
|
143
|
+
|
144
|
+
var tsplus_module_32 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Duration/api"));
|
145
|
+
|
146
|
+
var tsplus_module_33 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Exit/api"));
|
147
|
+
|
148
|
+
var _AtomicReference = /*#__PURE__*/require("@fncts/base/internal/AtomicReference");
|
23
149
|
|
24
150
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
25
151
|
|
26
152
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
27
153
|
|
28
|
-
const
|
29
|
-
|
154
|
+
const fileName_1 = "(@fncts/io) src/Sink/api.ts";
|
155
|
+
const collectAllWhileWith = collectAllWhileWith_1;
|
156
|
+
exports.collectAllWhileWith = collectAllWhileWith;
|
157
|
+
const contramap = contramap_1;
|
158
|
+
exports.contramap = contramap;
|
159
|
+
const contramapChunks = contramapChunks_1;
|
160
|
+
exports.contramapChunks = contramapChunks;
|
161
|
+
const contramapChunksIO = contramapChunksIO_1;
|
162
|
+
exports.contramapChunksIO = contramapChunksIO;
|
163
|
+
const contramapIO = contramapIO_1;
|
164
|
+
exports.contramapIO = contramapIO;
|
165
|
+
const defer = defer_1;
|
166
|
+
exports.defer = defer;
|
167
|
+
const failCause = failCause_1;
|
168
|
+
exports.failCause = failCause;
|
169
|
+
const failCauseNow = failCauseNow_1;
|
170
|
+
exports.failCauseNow = failCauseNow;
|
171
|
+
const failNow = failNow_1;
|
172
|
+
exports.failNow = failNow;
|
173
|
+
const flatMap = flatMap_1;
|
174
|
+
exports.flatMap = flatMap;
|
175
|
+
const fromQueue = fromQueue_1;
|
176
|
+
exports.fromQueue = fromQueue;
|
177
|
+
const fromQueueWithShutdown = fromQueueWithShutdown_1;
|
178
|
+
exports.fromQueueWithShutdown = fromQueueWithShutdown;
|
179
|
+
const fromIO = fromIO_1;
|
180
|
+
exports.fromIO = fromIO;
|
181
|
+
const ignoreLeftover = ignoreLeftover_1;
|
182
|
+
exports.ignoreLeftover = ignoreLeftover;
|
183
|
+
const makeForeachChunk = makeForeachChunk_1;
|
184
|
+
exports.makeForeachChunk = makeForeachChunk;
|
185
|
+
const makeForeachWhile = makeForeachWhile_1;
|
186
|
+
exports.makeForeachWhile = makeForeachWhile;
|
187
|
+
const makeFold = makeFold_1;
|
188
|
+
exports.makeFold = makeFold;
|
189
|
+
const makeFoldUntil = makeFoldUntil_1;
|
190
|
+
exports.makeFoldUntil = makeFoldUntil;
|
191
|
+
const makeFoldChunks = makeFoldChunks_1;
|
192
|
+
exports.makeFoldChunks = makeFoldChunks;
|
193
|
+
const makeFoldChunksIO = makeFoldChunksIO_1;
|
194
|
+
exports.makeFoldChunksIO = makeFoldChunksIO;
|
195
|
+
const makeFoldLeft = makeFoldLeft_1;
|
196
|
+
exports.makeFoldLeft = makeFoldLeft;
|
197
|
+
const makeFoldIO = makeFoldIO_1;
|
198
|
+
exports.makeFoldIO = makeFoldIO;
|
199
|
+
const makeFoldWeightedDecompose = makeFoldWeightedDecompose_1;
|
200
|
+
exports.makeFoldWeightedDecompose = makeFoldWeightedDecompose;
|
201
|
+
const makeFoldWeightedDecomposeIO = makeFoldWeightedDecomposeIO_1;
|
202
|
+
exports.makeFoldWeightedDecomposeIO = makeFoldWeightedDecomposeIO;
|
203
|
+
const map_ = map_1;
|
204
|
+
exports.map_ = map_;
|
205
|
+
const mapIO_ = mapIO_1;
|
206
|
+
exports.mapIO_ = mapIO_;
|
207
|
+
const matchSink_ = matchSink_1;
|
208
|
+
exports.matchSink_ = matchSink_;
|
209
|
+
const raceBoth = raceBoth_1;
|
210
|
+
exports.raceBoth = raceBoth;
|
211
|
+
const raceWith = raceWith_1;
|
212
|
+
exports.raceWith = raceWith;
|
213
|
+
const serviceWith = serviceWith_1;
|
214
|
+
exports.serviceWith = serviceWith;
|
215
|
+
const summarized = summarized_1;
|
216
|
+
exports.summarized = summarized;
|
217
|
+
const unwrap = unwrap_1;
|
218
|
+
exports.unwrap = unwrap;
|
219
|
+
const unwrapScoped = unwrapScoped_1;
|
220
|
+
exports.unwrapScoped = unwrapScoped;
|
221
|
+
const zipWith = zipWith_1;
|
222
|
+
exports.zipWith = zipWith;
|
223
|
+
const zipWithC = zipWithC_1;
|
224
|
+
exports.zipWithC = zipWithC;
|
30
225
|
|
31
|
-
|
32
|
-
|
226
|
+
/**
|
227
|
+
* Like {@link zip}, but keeps only the result from this sink
|
228
|
+
*
|
229
|
+
* @tsplus fluent fncts.io.Sink apFirst
|
230
|
+
*/
|
231
|
+
function apFirst(self, that) {
|
232
|
+
return zipWith_1(() => self, that, (z, _) => z, fileName_1 + ":14:22");
|
33
233
|
}
|
34
234
|
/**
|
35
|
-
*
|
235
|
+
* Like {@link zipC}, but keeps only the result from this sink
|
36
236
|
*
|
37
|
-
* @tsplus
|
237
|
+
* @tsplus fluent fncts.io.Sink apFirstC
|
238
|
+
*/
|
239
|
+
|
240
|
+
|
241
|
+
function apFirstC(self, that) {
|
242
|
+
return zipWithC_1(() => self, that, (z, _) => z, fileName_1 + ":26:23");
|
243
|
+
}
|
244
|
+
/**
|
245
|
+
* Like {@link zip}, but keeps only the result from the `that` sink
|
246
|
+
*
|
247
|
+
* @tsplus fluent fncts.io.Sink apSecond
|
248
|
+
*/
|
249
|
+
|
250
|
+
|
251
|
+
function apSecond(self, that, __tsplusTrace) {
|
252
|
+
return zipWith_1(() => self, that, (_, z1) => z1, __tsplusTrace);
|
253
|
+
}
|
254
|
+
/**
|
255
|
+
* Like {@link zipC}, but keeps only the result from the `that` sink
|
256
|
+
*
|
257
|
+
* @tsplus fluent fncts.io.Sink apSecondC
|
258
|
+
*/
|
259
|
+
|
260
|
+
|
261
|
+
function apSecondC(self, that, __tsplusTrace) {
|
262
|
+
return zipWithC_1(() => self, that, (_, z1) => z1, __tsplusTrace);
|
263
|
+
}
|
264
|
+
/**
|
265
|
+
* Replaces this sink's result with the provided value.
|
266
|
+
*
|
267
|
+
* @tsplus fluent fncts.io.Sink as
|
268
|
+
*/
|
269
|
+
|
270
|
+
|
271
|
+
function as(self, z, __tsplusTrace) {
|
272
|
+
return map_1(self, () => z(), __tsplusTrace);
|
273
|
+
}
|
274
|
+
/**
|
275
|
+
* Repeatedly runs the sink and accumulates its results into a chunk
|
276
|
+
*
|
277
|
+
* @tsplus fluent fncts.io.Sink collectAll
|
278
|
+
*/
|
279
|
+
|
280
|
+
|
281
|
+
function collectAll(self, __tsplusTrace) {
|
282
|
+
return collectAllWhileWith_1(self, () => tsplus_module_1.empty(), () => true, (s, z) => tsplus_module_2.append_(s, z), __tsplusTrace);
|
283
|
+
}
|
284
|
+
/**
|
285
|
+
* Repeatedly runs the sink for as long as its results satisfy the predicate
|
286
|
+
* `p`. The sink's results will be accumulated using the stepping function
|
287
|
+
* `f`.
|
288
|
+
*
|
289
|
+
* @tsplus fluent fncts.io.Sink collectAllWhileWith
|
38
290
|
*/
|
39
291
|
|
40
292
|
|
41
|
-
function
|
42
|
-
return new
|
293
|
+
function collectAllWhileWith_1(self, z, p, f, __tsplusTrace) {
|
294
|
+
return new tsplus_module_3.Sink(tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => tsplus_module_9.zip_(tsplus_module_8.make(() => tsplus_module_1.empty()), tsplus_module_8.make(() => false))), ([leftoversRef, upstreamDoneRef]) => {
|
295
|
+
const upstreamMarker = tsplus_module_4.readWith(inp => tsplus_module_5.apSecond_(tsplus_module_4.writeNow(inp), upstreamMarker), tsplus_module_4.failNow, x => tsplus_module_4.as_(tsplus_module_4.fromIO(() => tsplus_module_6.set_(upstreamDoneRef, true)), () => x));
|
296
|
+
|
297
|
+
function loop(currentResult) {
|
298
|
+
return tsplus_module_4.matchChannel_(tsplus_module_4.collectElements(self.channel), tsplus_module_4.failNow, ([leftovers, doneValue]) => {
|
299
|
+
if (p(doneValue)) {
|
300
|
+
return tsplus_module_5.apSecond_(tsplus_module_4.fromIO(() => tsplus_module_6.set_(leftoversRef, tsplus_module_2.flatten(leftovers))), tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => tsplus_module_7.get(upstreamDoneRef)), upstreamDone => {
|
301
|
+
const accumulatedResult = f(currentResult, doneValue);
|
302
|
+
if (upstreamDone) return tsplus_module_4.as_(tsplus_module_4.writeNow(tsplus_module_2.flatten(leftovers)), () => accumulatedResult);else return loop(accumulatedResult);
|
303
|
+
}));
|
304
|
+
} else {
|
305
|
+
return tsplus_module_4.as_(tsplus_module_4.writeNow(tsplus_module_2.flatten(leftovers)), () => currentResult);
|
306
|
+
}
|
307
|
+
});
|
308
|
+
}
|
309
|
+
|
310
|
+
return tsplus_module_4.pipeTo_(tsplus_module_4.pipeTo_(upstreamMarker, tsplus_module_4.bufferChunk(leftoversRef)), loop(z()));
|
311
|
+
}));
|
312
|
+
}
|
313
|
+
/**
|
314
|
+
* Collects the leftovers from the stream when the sink succeeds and returns
|
315
|
+
* them as part of the sink's result
|
316
|
+
*
|
317
|
+
* @tsplus getter fncts.io.Sink collectLeftover
|
318
|
+
*/
|
319
|
+
|
320
|
+
|
321
|
+
function collectLeftover(self, __tsplusTrace) {
|
322
|
+
return new tsplus_module_3.Sink(tsplus_module_5.map_(tsplus_module_4.collectElements(self.channel), ([chunks, z]) => [z, tsplus_module_2.flatten(chunks)]));
|
323
|
+
}
|
324
|
+
/**
|
325
|
+
* Transforms this sink's input elements.
|
326
|
+
*
|
327
|
+
* @tsplus fluent fncts.io.Sink contramap
|
328
|
+
*/
|
329
|
+
|
330
|
+
|
331
|
+
function contramap_1(self, f, __tsplusTrace) {
|
332
|
+
return contramapChunks_1(self, chunk => tsplus_module_2.map_(chunk, f), __tsplusTrace);
|
333
|
+
}
|
334
|
+
/**
|
335
|
+
* Transforms this sink's input chunks. `f` must preserve chunking-invariance
|
336
|
+
*
|
337
|
+
* @tsplus fluent fncts.io.Sink contramapChunks
|
338
|
+
*/
|
339
|
+
|
340
|
+
|
341
|
+
function contramapChunks_1(self, f, __tsplusTrace) {
|
342
|
+
const loop = tsplus_module_4.readWith(chunk => tsplus_module_5.apSecond_(tsplus_module_4.writeNow(f(chunk)), loop), tsplus_module_4.failNow, tsplus_module_5.succeedNow);
|
343
|
+
return new tsplus_module_3.Sink(tsplus_module_4.pipeTo_(loop, self.channel));
|
344
|
+
}
|
345
|
+
/**
|
346
|
+
* Effectfully transforms this sink's input chunks. `f` must preserve
|
347
|
+
* chunking-invariance
|
348
|
+
*
|
349
|
+
* @tsplus fluent fncts.io.Sink contramapChunksIO
|
350
|
+
*/
|
351
|
+
|
352
|
+
|
353
|
+
function contramapChunksIO_1(self, f, __tsplusTrace) {
|
354
|
+
const loop = tsplus_module_4.readWith(chunk => tsplus_module_5.apSecond_(tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => f(chunk)), tsplus_module_4.writeNow), loop), tsplus_module_4.failNow, tsplus_module_5.succeedNow);
|
355
|
+
return new tsplus_module_3.Sink(tsplus_module_4.pipeToOrFail_(loop, self.channel));
|
356
|
+
}
|
357
|
+
/**
|
358
|
+
* Effectfully transforms this sink's input elements.
|
359
|
+
*
|
360
|
+
* @tsplus fluent fncts.io.Sink contramapIO
|
361
|
+
*/
|
362
|
+
|
363
|
+
|
364
|
+
function contramapIO_1(self, f, __tsplusTrace) {
|
365
|
+
return contramapChunksIO_1(self, chunk => tsplus_module_10.mapIO_(chunk, f), __tsplusTrace);
|
366
|
+
}
|
367
|
+
/**
|
368
|
+
* Transforms both inputs and result of this sink using the provided
|
369
|
+
* functions.
|
370
|
+
*
|
371
|
+
* @tsplus fluent fncts.io.Sink dimap
|
372
|
+
*/
|
373
|
+
|
374
|
+
|
375
|
+
function dimap(self, f, g, __tsplusTrace) {
|
376
|
+
return map_1(contramap_1(self, f, __tsplusTrace), g, __tsplusTrace);
|
377
|
+
}
|
378
|
+
/**
|
379
|
+
* Transforms both input chunks and result of this sink using the provided
|
380
|
+
* functions.
|
381
|
+
*
|
382
|
+
* @tsplus fluent fncts.io.Sink dimapChunks
|
383
|
+
*/
|
384
|
+
|
385
|
+
|
386
|
+
function dimapChunks(self, f, g, __tsplusTrace) {
|
387
|
+
return map_1(contramapChunks_1(self, f, __tsplusTrace), g, __tsplusTrace);
|
388
|
+
}
|
389
|
+
/**
|
390
|
+
* Effectfully transforms both input chunks and result of this sink using the
|
391
|
+
* provided functions. `f` and `g` must preserve chunking-invariance
|
392
|
+
*
|
393
|
+
* @tsplus fluent fncts.io.Sink dimapChunksIO
|
394
|
+
*/
|
395
|
+
|
396
|
+
|
397
|
+
function dimapChunksIO(self, f, g, __tsplusTrace) {
|
398
|
+
return mapIO_1(contramapChunksIO_1(self, f, __tsplusTrace), g, __tsplusTrace);
|
399
|
+
}
|
400
|
+
/**
|
401
|
+
* Effectfully transforms both inputs and result of this sink using the
|
402
|
+
* provided functions.
|
403
|
+
*
|
404
|
+
* @tsplus fluent fncts.io.Sink dimapIO
|
405
|
+
*/
|
406
|
+
|
407
|
+
|
408
|
+
function dimapIO(self, f, g, __tsplusTrace) {
|
409
|
+
return mapIO_1(contramapIO_1(self, f, __tsplusTrace), g, __tsplusTrace);
|
410
|
+
}
|
411
|
+
/**
|
412
|
+
* Returns a lazily constructed sink that may require effects for its
|
413
|
+
* creation.
|
414
|
+
*
|
415
|
+
* @tsplus static fncts.io.SinkOps defer
|
416
|
+
*/
|
417
|
+
|
418
|
+
|
419
|
+
function defer_1(sink, __tsplusTrace) {
|
420
|
+
return new tsplus_module_3.Sink(tsplus_module_4.defer(() => sink().channel));
|
43
421
|
}
|
44
422
|
|
45
|
-
const drainLoop = /*#__PURE__*/
|
423
|
+
const drainLoop = /*#__PURE__*/tsplus_module_4.readWithCause(() => drainLoop, tsplus_module_5.failCauseNow, () => tsplus_module_4.unit);
|
46
424
|
/**
|
47
425
|
* A sink that ignores all of its inputs.
|
48
426
|
*
|
49
427
|
* @tsplus static fncts.io.SinkOps drain
|
50
428
|
*/
|
51
429
|
|
52
|
-
const drain = /*#__PURE__*/new
|
430
|
+
const drain = /*#__PURE__*/new tsplus_module_3.Sink(drainLoop);
|
53
431
|
/**
|
54
|
-
*
|
432
|
+
* Drops incoming elements until the predicate `p` is satisfied.
|
433
|
+
*
|
434
|
+
* @tsplus static fncts.io.SinkOps dropUntil
|
55
435
|
*/
|
56
436
|
|
57
437
|
exports.drain = drain;
|
58
438
|
|
59
|
-
function
|
60
|
-
const loop =
|
61
|
-
const leftover =
|
62
|
-
const more =
|
439
|
+
function makeDropUntil(p, __tsplusTrace) {
|
440
|
+
const loop = tsplus_module_4.readWith(inp => {
|
441
|
+
const leftover = tsplus_module_2.dropUntil(inp, p);
|
442
|
+
const more = tsplus_module_2.isEmpty(leftover);
|
63
443
|
|
64
444
|
if (more) {
|
65
445
|
return loop;
|
66
446
|
} else {
|
67
|
-
return
|
447
|
+
return tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftover), tsplus_module_4.id());
|
68
448
|
}
|
69
|
-
},
|
70
|
-
return new
|
449
|
+
}, tsplus_module_4.failNow, () => tsplus_module_4.unit);
|
450
|
+
return new tsplus_module_3.Sink(loop);
|
71
451
|
}
|
72
452
|
/**
|
73
|
-
*
|
453
|
+
* Drops incoming elements until the effectful predicate `p` is satisfied.
|
74
454
|
*
|
75
|
-
* @tsplus static fncts.io.SinkOps
|
455
|
+
* @tsplus static fncts.io.SinkOps dropUntilIO
|
76
456
|
*/
|
77
457
|
|
78
458
|
|
79
|
-
function
|
80
|
-
|
459
|
+
function makeDropUntilIO(p, __tsplusTrace) {
|
460
|
+
const loop = tsplus_module_4.readWith(inp => tsplus_module_4.unwrap(() => tsplus_module_9.map_(tsplus_module_11.dropUntilIO(inp, p, __tsplusTrace), leftover => tsplus_module_2.isEmpty(leftover) ? loop : tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftover), tsplus_module_4.id()), __tsplusTrace)), tsplus_module_4.failNow, () => tsplus_module_4.unit);
|
461
|
+
return new tsplus_module_3.Sink(loop);
|
81
462
|
}
|
463
|
+
/**
|
464
|
+
* Drops incoming elements as long as the predicate `p` is satisfied.
|
465
|
+
*
|
466
|
+
* @tsplus static fncts.io.SinkOps dropWhile
|
467
|
+
*/
|
468
|
+
|
469
|
+
|
470
|
+
function makeDropWhile(predicate, __tsplusTrace) {
|
471
|
+
const loop = tsplus_module_4.readWith(inp => {
|
472
|
+
const leftover = tsplus_module_2.dropWhile_(inp, predicate);
|
473
|
+
const more = tsplus_module_2.isEmpty(leftover);
|
474
|
+
|
475
|
+
if (more) {
|
476
|
+
return loop;
|
477
|
+
} else {
|
478
|
+
return tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftover), tsplus_module_4.id());
|
479
|
+
}
|
480
|
+
}, tsplus_module_4.failNow, () => tsplus_module_4.unit);
|
481
|
+
return new tsplus_module_3.Sink(loop);
|
482
|
+
}
|
483
|
+
/**
|
484
|
+
* Drops incoming elements as long as the effectful predicate `p` is
|
485
|
+
* satisfied.
|
486
|
+
*
|
487
|
+
* @tsplus static fncts.io.SinkOps dropWhileIO
|
488
|
+
*/
|
82
489
|
|
83
|
-
function foreachWhileLoop(f, chunk, idx, len, cont) {
|
84
|
-
if (idx === len) {
|
85
|
-
return cont;
|
86
|
-
}
|
87
490
|
|
88
|
-
|
491
|
+
function dropWhileIO(p, __tsplusTrace) {
|
492
|
+
const loop = tsplus_module_4.readWith(inp => tsplus_module_4.unwrap(() => tsplus_module_9.map_(tsplus_module_12.dropWhileIO(inp, p, __tsplusTrace), leftover => tsplus_module_2.isEmpty(leftover) ? loop : tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftover), tsplus_module_4.id()), __tsplusTrace)), tsplus_module_4.failNow, () => tsplus_module_4.unit);
|
493
|
+
return new tsplus_module_3.Sink(loop);
|
89
494
|
}
|
90
495
|
/**
|
91
|
-
*
|
92
|
-
* until `f` evaluates to `false`.
|
496
|
+
* Accesses the whole environment of the sink.
|
93
497
|
*
|
94
|
-
* @tsplus static fncts.io.SinkOps
|
498
|
+
* @tsplus static fncts.io.SinkOps environment
|
499
|
+
*/
|
500
|
+
|
501
|
+
|
502
|
+
function environment(__tsplusTrace) {
|
503
|
+
return fromIO_1(() => tsplus_module_13.environment(__tsplusTrace), __tsplusTrace);
|
504
|
+
}
|
505
|
+
/**
|
506
|
+
* Accesses the environment of the sink.
|
507
|
+
*
|
508
|
+
* @tsplus static fncts.io.SinkOps environmentWith
|
509
|
+
*/
|
510
|
+
|
511
|
+
|
512
|
+
function environmentWith(f, __tsplusTrace) {
|
513
|
+
return fromIO_1(() => tsplus_module_13.environmentWith(f, __tsplusTrace), __tsplusTrace);
|
514
|
+
}
|
515
|
+
/**
|
516
|
+
* Accesses the environment of the sink in the context of an effect.
|
517
|
+
*
|
518
|
+
* @tsplus static fncts.io.SinkOps environmentWithIO
|
519
|
+
*/
|
520
|
+
|
521
|
+
|
522
|
+
function environmentWithIO(f, __tsplusTrace) {
|
523
|
+
return fromIO_1(() => tsplus_module_13.environmentWithIO(f, __tsplusTrace), __tsplusTrace);
|
524
|
+
}
|
525
|
+
/**
|
526
|
+
* Accesses the environment of the sink in the context of a sink.
|
527
|
+
*
|
528
|
+
* @tsplus static fncts.io.SinkOps environmentWithSink
|
529
|
+
*/
|
530
|
+
|
531
|
+
|
532
|
+
function environmentWithSink(f, __tsplusTrace) {
|
533
|
+
return new tsplus_module_3.Sink(tsplus_module_4.unwrap(() => tsplus_module_13.environmentWith(tsplus_module_14.compose_(f, s => s.channel), __tsplusTrace)));
|
534
|
+
}
|
535
|
+
/**
|
536
|
+
* A sink that always fails with the specified error.
|
537
|
+
*
|
538
|
+
* @tsplus static fncts.io.SinkOps fail
|
539
|
+
*/
|
540
|
+
|
541
|
+
|
542
|
+
function fail(e, __tsplusTrace) {
|
543
|
+
return new tsplus_module_3.Sink(tsplus_module_4.fail(e));
|
544
|
+
}
|
545
|
+
/**
|
546
|
+
* Creates a sink halting with a specified cause.
|
547
|
+
*
|
548
|
+
* @tsplus static fncts.io.SinkOps failCause
|
549
|
+
*/
|
550
|
+
|
551
|
+
|
552
|
+
function failCause_1(cause, __tsplusTrace) {
|
553
|
+
return new tsplus_module_3.Sink(tsplus_module_5.failCause(cause));
|
554
|
+
}
|
555
|
+
/**
|
556
|
+
* Creates a sink halting with a specified cause.
|
557
|
+
*
|
558
|
+
* @tsplus static fncts.io.SinkOps failCauseNow
|
559
|
+
*/
|
560
|
+
|
561
|
+
|
562
|
+
function failCauseNow_1(cause, __tsplusTrace) {
|
563
|
+
return new tsplus_module_3.Sink(tsplus_module_5.failCauseNow(cause));
|
564
|
+
}
|
565
|
+
/**
|
566
|
+
* A sink that always fails with the specified error.
|
567
|
+
*
|
568
|
+
* @tsplus static fncts.io.SinkOps failNow
|
569
|
+
*/
|
570
|
+
|
571
|
+
|
572
|
+
function failNow_1(e, __tsplusTrace) {
|
573
|
+
return new tsplus_module_3.Sink(tsplus_module_4.failNow(e));
|
574
|
+
}
|
575
|
+
/**
|
576
|
+
* Filters the sink's input with the given predicate
|
577
|
+
*
|
578
|
+
* @tsplus static fncts.io.SinkOps filterInput
|
579
|
+
*/
|
580
|
+
|
581
|
+
|
582
|
+
function filterInput(self, p, __tsplusTrace) {
|
583
|
+
return contramapChunks_1(self, chunk => tsplus_module_2.filter_(chunk, p), __tsplusTrace);
|
584
|
+
}
|
585
|
+
/**
|
586
|
+
* Filters the sink's input with the given IO predicate
|
587
|
+
*
|
588
|
+
* @tsplus static fncts.io.SinkOps filterInputIO
|
589
|
+
*/
|
590
|
+
|
591
|
+
|
592
|
+
function filterInputIO(self, p, __tsplusTrace) {
|
593
|
+
return contramapChunksIO_1(self, chunk => tsplus_module_15.filterIO(chunk, p), __tsplusTrace);
|
594
|
+
}
|
595
|
+
/**
|
596
|
+
* Creates a sink that produces values until one verifies the predicate `f`.
|
597
|
+
*
|
598
|
+
* @tsplus fluent fncts.io.Sink findIO
|
599
|
+
*/
|
600
|
+
|
601
|
+
|
602
|
+
function findIO(self, f, __tsplusTrace) {
|
603
|
+
return new tsplus_module_3.Sink(tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => tsplus_module_9.zip_(tsplus_module_8.make(() => tsplus_module_1.empty()), tsplus_module_8.make(() => false))), ([leftoversRef, upstreamDoneRef]) => {
|
604
|
+
const upstreamMarker = tsplus_module_4.readWith(inp => tsplus_module_5.apSecond_(tsplus_module_4.writeNow(inp), upstreamMarker), tsplus_module_4.failNow, x => tsplus_module_4.as_(tsplus_module_4.fromIO(() => tsplus_module_6.set_(upstreamDoneRef, true)), () => x));
|
605
|
+
const loop = tsplus_module_4.matchChannel_(tsplus_module_4.collectElements(self.channel), tsplus_module_4.failNow, ([leftovers, doneValue]) => tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => f(doneValue)), satisfied => tsplus_module_5.apSecond_(tsplus_module_4.fromIO(() => tsplus_module_6.set_(leftoversRef, tsplus_module_2.flatten(leftovers))), tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => tsplus_module_7.get(upstreamDoneRef)), upstreamDone => {
|
606
|
+
if (satisfied) return tsplus_module_4.as_(tsplus_module_4.writeNow(tsplus_module_2.flatten(leftovers)), () => tsplus_module_16.just(doneValue));else if (upstreamDone) return tsplus_module_4.as_(tsplus_module_4.writeNow(tsplus_module_2.flatten(leftovers)), () => tsplus_module_16.nothing());else return loop;
|
607
|
+
}))));
|
608
|
+
return tsplus_module_4.pipeTo_(tsplus_module_4.pipeTo_(upstreamMarker, tsplus_module_4.bufferChunk(leftoversRef)), loop);
|
609
|
+
}));
|
610
|
+
}
|
611
|
+
/**
|
612
|
+
* Runs this sink until it yields a result, then uses that result to create
|
613
|
+
* another sink from the provided function which will continue to run until it
|
614
|
+
* yields a result.
|
615
|
+
*
|
616
|
+
* This function essentially runs sinks in sequence.
|
617
|
+
*
|
618
|
+
* @tsplus fluent fncts.io.Sink flatMap
|
619
|
+
*/
|
620
|
+
|
621
|
+
|
622
|
+
function flatMap_1(self, f, __tsplusTrace) {
|
623
|
+
return matchSink_1(self, failNow_1, f, __tsplusTrace);
|
624
|
+
}
|
625
|
+
/**
|
626
|
+
* Creates a sink from a {@link Channel}
|
627
|
+
*
|
628
|
+
* @tsplus static fncts.io.SinkOps fromChannel
|
629
|
+
* @tsplus static fncts.io.SinkOps __call
|
630
|
+
*/
|
631
|
+
|
632
|
+
|
633
|
+
function fromChannel(channel) {
|
634
|
+
return new tsplus_module_3.Sink(channel);
|
635
|
+
}
|
636
|
+
/**
|
637
|
+
* Creates a sink from a chunk processing function.
|
638
|
+
*
|
639
|
+
* @tsplus static fncts.io.SinkOps fromPush
|
640
|
+
*/
|
641
|
+
|
642
|
+
|
643
|
+
function fromPush(push, __tsplusTrace) {
|
644
|
+
return new tsplus_module_3.Sink(tsplus_module_4.unwrapScoped(() => tsplus_module_9.map_(push, fromPushPull, __tsplusTrace)));
|
645
|
+
}
|
646
|
+
|
647
|
+
function fromPushPull(push) {
|
648
|
+
return tsplus_module_4.readWith(inp => tsplus_module_4.matchChannel_(tsplus_module_4.fromIO(() => push(tsplus_module_16.just(inp))), ([r, leftovers]) => tsplus_module_17.match_(r, e => tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftovers), tsplus_module_4.failNow(e)), z => tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftovers), tsplus_module_5.succeedNow(z))), () => fromPushPull(push)), tsplus_module_4.failNow, () => tsplus_module_4.matchChannel_(tsplus_module_4.fromIO(() => push(tsplus_module_16.nothing())), ([r, leftovers]) => tsplus_module_17.match_(r, e => tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftovers), tsplus_module_4.failNow(e)), z => tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftovers), tsplus_module_5.succeedNow(z))), () => tsplus_module_4.fromIO(() => tsplus_module_9.halt(() => new Error("empty sink"), fileName_1 + ":591:37"))));
|
649
|
+
}
|
650
|
+
/**
|
651
|
+
* Create a sink which enqueues each element into the specified queue.
|
652
|
+
*
|
653
|
+
* @tsplus static fncts.io.SinkOps fromQueue
|
654
|
+
*/
|
655
|
+
|
656
|
+
|
657
|
+
function fromQueue_1(queue, __tsplusTrace) {
|
658
|
+
return unwrap_1(() => tsplus_module_9.map_(tsplus_module_9.succeed(queue, __tsplusTrace), queue => makeForeachChunk_1(inp => tsplus_module_18.offerAll_(queue, inp), __tsplusTrace), __tsplusTrace));
|
659
|
+
}
|
660
|
+
/**
|
661
|
+
* Create a sink which enqueues each element into the specified queue. The
|
662
|
+
* queue will be shutdown once the stream is closed.
|
663
|
+
*
|
664
|
+
* @tsplus static fncts.io.SinkOps fromQueueWithShutdown
|
665
|
+
*/
|
666
|
+
|
667
|
+
|
668
|
+
function fromQueueWithShutdown_1(queue, __tsplusTrace) {
|
669
|
+
return unwrapScoped_1(() => tsplus_module_9.map_(tsplus_module_19.acquireRelease(() => tsplus_module_9.succeed(queue, __tsplusTrace), queue => tsplus_module_18.shutdown(queue)), queue => fromQueue_1(() => queue, __tsplusTrace), __tsplusTrace), __tsplusTrace);
|
670
|
+
}
|
671
|
+
/**
|
672
|
+
* Create a sink which publishes each element to the specified hub.
|
673
|
+
*
|
674
|
+
* @tsplus static fncts.io.SinkOps fromHub
|
675
|
+
*/
|
676
|
+
|
677
|
+
|
678
|
+
function fromHub(hub, __tsplusTrace) {
|
679
|
+
return fromQueue_1(hub, __tsplusTrace);
|
680
|
+
}
|
681
|
+
/**
|
682
|
+
* Create a sink which publishes each element to the specified hub. The hub
|
683
|
+
* will be shutdown once the stream is closed.
|
684
|
+
*
|
685
|
+
* @tsplus static fncts.io.SinkOps fromHubWithShutdown
|
686
|
+
*/
|
687
|
+
|
688
|
+
|
689
|
+
function fromHubWithShutdown(hub, __tsplusTrace) {
|
690
|
+
return fromQueueWithShutdown_1(hub, __tsplusTrace);
|
691
|
+
}
|
692
|
+
/**
|
693
|
+
* Creates a single-value sink produced from an effect
|
694
|
+
*
|
695
|
+
* @tsplus static fncts.io.SinkOps fromIO
|
696
|
+
*/
|
697
|
+
|
698
|
+
|
699
|
+
function fromIO_1(b, __tsplusTrace) {
|
700
|
+
return new tsplus_module_3.Sink(tsplus_module_4.fromIO(b));
|
701
|
+
}
|
702
|
+
/**
|
703
|
+
* Creates a sink halting with the specified unchecked value.
|
704
|
+
*
|
705
|
+
* @tsplus static fncts.io.SinkOps halt
|
706
|
+
*/
|
707
|
+
|
708
|
+
|
709
|
+
function halt(defect, __tsplusTrace) {
|
710
|
+
return failCause_1(() => tsplus_module_20.halt(defect()), __tsplusTrace);
|
711
|
+
}
|
712
|
+
/**
|
713
|
+
* Creates a sink halting with the specified unchecked value.
|
714
|
+
*
|
715
|
+
* @tsplus static fncts.io.SinkOps haltNow
|
716
|
+
*/
|
717
|
+
|
718
|
+
|
719
|
+
function haltNow(defect, __tsplusTrace) {
|
720
|
+
return failCauseNow_1(tsplus_module_20.halt(defect), __tsplusTrace);
|
721
|
+
}
|
722
|
+
/**
|
723
|
+
* Creates a sink containing the first value.
|
724
|
+
*
|
725
|
+
* @tsplus static fncts.io.SinkOps head
|
726
|
+
*/
|
727
|
+
|
728
|
+
|
729
|
+
function head(__tsplusTrace) {
|
730
|
+
return makeFold_1(() => tsplus_module_16.nothing(), elem => tsplus_module_21.isNothing(elem), (s, inp) => tsplus_module_22.match_(s, () => tsplus_module_16.just(inp), () => s), __tsplusTrace);
|
731
|
+
}
|
732
|
+
/**
|
733
|
+
* Drains the remaining elements from the stream after the sink finishes
|
734
|
+
*
|
735
|
+
* @tsplus getter fncts.io.Sink ignoreLeftover
|
736
|
+
*/
|
737
|
+
|
738
|
+
|
739
|
+
function ignoreLeftover_1(self, __tsplusTrace) {
|
740
|
+
return new tsplus_module_3.Sink(tsplus_module_4.drain(self.channel));
|
741
|
+
}
|
742
|
+
/**
|
743
|
+
* Creates a sink containing the last value.
|
744
|
+
*
|
745
|
+
* @tsplus static fncts.io.SinkOps last
|
746
|
+
*/
|
747
|
+
|
748
|
+
|
749
|
+
function last(__tsplusTrace) {
|
750
|
+
return makeFoldLeft_1(() => tsplus_module_16.nothing(), (_, inp) => tsplus_module_16.just(inp));
|
751
|
+
}
|
752
|
+
/**
|
753
|
+
* Creates a sink that does not consume any input but provides the given chunk
|
754
|
+
* as its leftovers
|
755
|
+
*
|
756
|
+
* @tsplus static fncts.io.SinkOps leftover
|
757
|
+
*/
|
758
|
+
|
759
|
+
|
760
|
+
function leftover(c, __tsplusTrace) {
|
761
|
+
return new tsplus_module_3.Sink(tsplus_module_4.write(c));
|
762
|
+
}
|
763
|
+
/**
|
764
|
+
* Logs the specified message at the current log level.
|
765
|
+
*
|
766
|
+
* @tsplus static fncts.io.SinkOps log
|
767
|
+
*/
|
768
|
+
|
769
|
+
|
770
|
+
function log(message, __tsplusTrace) {
|
771
|
+
return fromIO_1(() => tsplus_module_9.log(message, __tsplusTrace), __tsplusTrace);
|
772
|
+
}
|
773
|
+
/**
|
774
|
+
* A sink that collects all of its inputs into a chunk.
|
775
|
+
*
|
776
|
+
* @tsplus static fncts.io.SinkOps collectAll
|
777
|
+
*/
|
778
|
+
|
779
|
+
|
780
|
+
function makeCollectAll() {
|
781
|
+
return new tsplus_module_3.Sink(collectLoop(tsplus_module_1.empty()));
|
782
|
+
}
|
783
|
+
|
784
|
+
function collectLoop(state) {
|
785
|
+
return tsplus_module_4.readWithCause(inp => collectLoop(tsplus_module_2.concat_(state, inp)), tsplus_module_5.failCauseNow, () => tsplus_module_5.endNow(state));
|
786
|
+
}
|
787
|
+
/**
|
788
|
+
* A sink that collects first `n` elements into a chunk. Note that the chunk
|
789
|
+
* is preallocated and must fit in memory.
|
790
|
+
*
|
791
|
+
* @tsplus static fncts.io.SinkOps collectAllN
|
792
|
+
*/
|
793
|
+
|
794
|
+
|
795
|
+
function makeCollectAllN(n) {
|
796
|
+
return flatMap_1(fromIO_1(() => tsplus_module_9.succeed(() => new tsplus_module_23.ConcBuilder(), fileName_1 + ":755:32"), fileName_1 + ":755:21"), builder => map_1(makeFoldUntil_1(() => builder, n, (builder, inp) => builder.append(inp), fileName_1 + ":756:19"), builder => builder.result(), fileName_1 + ":756:95"), fileName_1 + ":755:64");
|
797
|
+
}
|
798
|
+
/**
|
799
|
+
* A sink that executes the provided effectful function for every element fed to it.
|
800
|
+
*
|
801
|
+
* @tsplus static fncts.io.SinkOps foreach
|
802
|
+
*/
|
803
|
+
|
804
|
+
|
805
|
+
function makeForeach(f, __tsplusTrace) {
|
806
|
+
return makeForeachWhile_1(inp => tsplus_module_9.as_(f(inp), () => true), __tsplusTrace);
|
807
|
+
}
|
808
|
+
/**
|
809
|
+
* A sink that executes the provided effectful function for every chunk fed to
|
810
|
+
* it.
|
811
|
+
*
|
812
|
+
* @tsplus static fncts.io.SinkOps foreachChunk
|
813
|
+
*/
|
814
|
+
|
815
|
+
|
816
|
+
function makeForeachChunk_1(f, __tsplusTrace) {
|
817
|
+
const process = tsplus_module_4.readWithCause(inp => tsplus_module_5.apSecond_(tsplus_module_4.fromIO(() => f(inp)), process), tsplus_module_5.failCauseNow, () => tsplus_module_4.unit);
|
818
|
+
return new tsplus_module_3.Sink(process);
|
819
|
+
}
|
820
|
+
/**
|
821
|
+
* A sink that executes the provided effectful function for every element fed to it
|
822
|
+
* until `f` evaluates to `false`.
|
823
|
+
*
|
824
|
+
* @tsplus static fncts.io.SinkOps foreachWhile
|
825
|
+
*/
|
826
|
+
|
827
|
+
|
828
|
+
function makeForeachWhile_1(f, __tsplusTrace) {
|
829
|
+
const process = tsplus_module_4.readWithCause(inp => foreachWhileLoop(f, inp, 0, inp.length, process), tsplus_module_5.failCauseNow, () => tsplus_module_4.unit);
|
830
|
+
return new tsplus_module_3.Sink(process);
|
831
|
+
}
|
832
|
+
|
833
|
+
function foreachWhileLoop(f, chunk, idx, len, cont) {
|
834
|
+
if (idx === len) {
|
835
|
+
return cont;
|
836
|
+
}
|
837
|
+
|
838
|
+
return tsplus_module_4.catchAll_(tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => f(tsplus_module_2.unsafeGet_(chunk, idx))), b => b ? foreachWhileLoop(f, chunk, idx + 1, len, cont) : tsplus_module_4.writeNow(tsplus_module_2.drop_(chunk, idx))), e => tsplus_module_5.apSecond_(tsplus_module_4.writeNow(tsplus_module_2.drop_(chunk, idx)), tsplus_module_4.failNow(e)));
|
839
|
+
}
|
840
|
+
/**
|
841
|
+
* A sink that executes the provided effectful function for every chunk fed to
|
842
|
+
* it until `f` evaluates to `false`.
|
843
|
+
*
|
844
|
+
* @tsplus static fncts.io.SinkOps foreachChunkWhile
|
845
|
+
*/
|
846
|
+
|
847
|
+
|
848
|
+
function makeForeachChunkWhile(f, __tsplusTrace) {
|
849
|
+
const reader = tsplus_module_4.readWith(inp => tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => f(inp)), cont => cont ? reader : tsplus_module_4.unit), tsplus_module_4.failNow, () => tsplus_module_4.unit);
|
850
|
+
return new tsplus_module_3.Sink(reader);
|
851
|
+
}
|
852
|
+
/**
|
853
|
+
* A sink that folds its inputs with the provided function, termination
|
854
|
+
* predicate and initial state.
|
855
|
+
*
|
856
|
+
* @tsplus static fncts.io.SinkOps fold
|
857
|
+
*/
|
858
|
+
|
859
|
+
|
860
|
+
function makeFold_1(z, contFn, f, __tsplusTrace) {
|
861
|
+
return defer_1(() => new tsplus_module_3.Sink(foldReader(z(), contFn, f)), __tsplusTrace);
|
862
|
+
}
|
863
|
+
/**
|
864
|
+
* @tsplus tailRec
|
865
|
+
*/
|
866
|
+
|
867
|
+
|
868
|
+
function foldChunkSplit(contFn, f, s, chunk, idx, len) {
|
869
|
+
var contFn_1 = contFn,
|
870
|
+
f_1 = f,
|
871
|
+
s_1 = s,
|
872
|
+
chunk_1 = chunk,
|
873
|
+
idx_1 = idx,
|
874
|
+
len_1 = len;
|
875
|
+
var contFn_2 = contFn,
|
876
|
+
f_2 = f,
|
877
|
+
s_2 = s,
|
878
|
+
chunk_2 = chunk,
|
879
|
+
idx_2 = idx,
|
880
|
+
len_2 = len;
|
881
|
+
|
882
|
+
while (1) {
|
883
|
+
if (idx_1 === len_1) {
|
884
|
+
return [s_1, tsplus_module_1.empty()];
|
885
|
+
} else {
|
886
|
+
const s1 = f_1(s_1, tsplus_module_2.unsafeGet_(chunk_1, idx_1));
|
887
|
+
|
888
|
+
if (contFn_1(s1)) {
|
889
|
+
contFn_2 = contFn_1;
|
890
|
+
f_2 = f_1;
|
891
|
+
s_2 = s1;
|
892
|
+
chunk_2 = chunk_1;
|
893
|
+
idx_2 = idx_1 + 1;
|
894
|
+
len_2 = len_1;
|
895
|
+
contFn_1 = contFn_2;
|
896
|
+
f_1 = f_2;
|
897
|
+
s_1 = s_2;
|
898
|
+
chunk_1 = chunk_2;
|
899
|
+
idx_1 = idx_2;
|
900
|
+
len_1 = len_2;
|
901
|
+
continue;
|
902
|
+
} else {
|
903
|
+
return [s1, tsplus_module_2.drop_(chunk_1, idx_1 + 1)];
|
904
|
+
}
|
905
|
+
}
|
906
|
+
}
|
907
|
+
}
|
908
|
+
|
909
|
+
function foldReader(s, contFn, f) {
|
910
|
+
if (!contFn(s)) {
|
911
|
+
return tsplus_module_5.succeedNow(s);
|
912
|
+
} else {
|
913
|
+
return tsplus_module_4.readWith(inp => {
|
914
|
+
const [nextS, leftovers] = foldChunkSplit(contFn, f, s, inp, 0, inp.length);
|
915
|
+
|
916
|
+
if (tsplus_module_2.isNonEmpty(leftovers)) {
|
917
|
+
return tsplus_module_4.as_(tsplus_module_4.writeNow(leftovers), () => nextS);
|
918
|
+
} else {
|
919
|
+
return foldReader(nextS, contFn, f);
|
920
|
+
}
|
921
|
+
}, _ => tsplus_module_4.failNow(_), _ => tsplus_module_5.succeedNow(_));
|
922
|
+
}
|
923
|
+
}
|
924
|
+
/**
|
925
|
+
* Creates a sink that folds elements of type `In` into a structure of type
|
926
|
+
* `S` until `max` elements have been folded.
|
927
|
+
*
|
928
|
+
* Like {@link foldWeighted}, but with a constant cost function of 1.
|
929
|
+
*
|
930
|
+
* @tsplus static fncts.io.SinkOps foldUntil
|
931
|
+
*/
|
932
|
+
|
933
|
+
|
934
|
+
function makeFoldUntil_1(z, max, f, __tsplusTrace) {
|
935
|
+
return unwrap_1(() => tsplus_module_9.map_(tsplus_module_9.succeed(max, __tsplusTrace), max => map_1(makeFold_1(() => [z(), 0], ([_, n]) => n < max, ([o, count], i) => [f(o, i), count + 1], __tsplusTrace), ([s]) => s, __tsplusTrace), __tsplusTrace));
|
936
|
+
}
|
937
|
+
/**
|
938
|
+
* A sink that folds its input chunks with the provided function, termination
|
939
|
+
* predicate and initial state. `contFn` condition is checked only for the
|
940
|
+
* initial value and at the end of processing of each chunk. `f` and `contFn`
|
941
|
+
* must preserve chunking-invariance.
|
942
|
+
*
|
943
|
+
* @tsplus static fncts.io.SinkOps foldChunks
|
944
|
+
*/
|
945
|
+
|
946
|
+
|
947
|
+
function makeFoldChunks_1(z, contFn, f, __tsplusTrace) {
|
948
|
+
return defer_1(() => new tsplus_module_3.Sink(foldChunksReader(z(), contFn, f)), __tsplusTrace);
|
949
|
+
}
|
950
|
+
|
951
|
+
function foldChunksReader(s, contFn, f) {
|
952
|
+
if (!contFn(s)) {
|
953
|
+
return tsplus_module_5.succeedNow(s);
|
954
|
+
} else {
|
955
|
+
return tsplus_module_4.readWith(inp => {
|
956
|
+
const nextS = f(s, inp);
|
957
|
+
return foldChunksReader(nextS, contFn, f);
|
958
|
+
}, err => tsplus_module_4.failNow(err), _ => tsplus_module_5.succeedNow(_));
|
959
|
+
}
|
960
|
+
}
|
961
|
+
/**
|
962
|
+
* A sink that effectfully folds its input chunks with the provided function,
|
963
|
+
* termination predicate and initial state. `contFn` condition is checked only
|
964
|
+
* for the initial value and at the end of processing of each chunk. `f` and
|
965
|
+
* `contFn` must preserve chunking-invariance.
|
966
|
+
*
|
967
|
+
* @tsplus static fncts.io.SinkOps foldChunksIO
|
968
|
+
*/
|
969
|
+
|
970
|
+
|
971
|
+
function makeFoldChunksIO_1(z, contFn, f, __tsplusTrace) {
|
972
|
+
return defer_1(() => new tsplus_module_3.Sink(foldChunksIOReader(z(), contFn, f)), __tsplusTrace);
|
973
|
+
}
|
974
|
+
|
975
|
+
function foldChunksIOReader(s, contFn, f) {
|
976
|
+
if (!contFn(s)) {
|
977
|
+
return tsplus_module_5.succeedNow(s);
|
978
|
+
} else {
|
979
|
+
return tsplus_module_4.readWith(inp => tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => f(s, inp)), s => foldChunksIOReader(s, contFn, f)), err => tsplus_module_4.failNow(err), _ => tsplus_module_5.succeedNow(_));
|
980
|
+
}
|
981
|
+
}
|
982
|
+
/**
|
983
|
+
* A sink that folds its inputs with the provided function and initial state.
|
984
|
+
*
|
985
|
+
* @tsplus static fncts.io.SinkOps foldLeft
|
986
|
+
*/
|
987
|
+
|
988
|
+
|
989
|
+
function makeFoldLeft_1(z, f) {
|
990
|
+
return ignoreLeftover_1(makeFold_1(z, () => true, f, fileName_1 + ":1006:19"), fileName_1 + ":1006:37");
|
991
|
+
}
|
992
|
+
/**
|
993
|
+
* A sink that folds its input chunks with the provided function and initial
|
994
|
+
* state. `f` must preserve chunking-invariance.
|
995
|
+
*
|
996
|
+
* @tsplus static fncts.io.SinkOps foldLeftChunks
|
997
|
+
*/
|
998
|
+
|
999
|
+
|
1000
|
+
function makeFoldLeftChunks(z, f) {
|
1001
|
+
return ignoreLeftover_1(makeFoldChunks_1(z, () => true, f, fileName_1 + ":1019:25"), fileName_1 + ":1019:43");
|
1002
|
+
}
|
1003
|
+
/**
|
1004
|
+
* A sink that effectfully folds its input chunks with the provided function
|
1005
|
+
* and initial state. `f` must preserve chunking-invariance.
|
1006
|
+
*
|
1007
|
+
* @tsplus static fncts.io.SinkOps foldLeftChunksIO
|
1008
|
+
*/
|
1009
|
+
|
1010
|
+
|
1011
|
+
function makeFoldLeftChunksIO(z, f, __tsplusTrace) {
|
1012
|
+
return makeFoldChunksIO_1(z, () => true, f, __tsplusTrace);
|
1013
|
+
}
|
1014
|
+
/**
|
1015
|
+
* A sink that effectfully folds its inputs with the provided function and
|
1016
|
+
* initial state.
|
1017
|
+
*
|
1018
|
+
* @tsplus static fncts.io.SinkOps foldLeftIO
|
1019
|
+
*/
|
1020
|
+
|
1021
|
+
|
1022
|
+
function makeFoldLeftIO(z, f, __tsplusTrace) {
|
1023
|
+
return makeFoldIO_1(z, () => true, f);
|
1024
|
+
}
|
1025
|
+
/**
|
1026
|
+
* A sink that effectfully folds its inputs with the provided function,
|
1027
|
+
* termination predicate and initial state.
|
1028
|
+
*
|
1029
|
+
* @tsplus static fncts.io.SinkOps foldIO
|
1030
|
+
*/
|
1031
|
+
|
1032
|
+
|
1033
|
+
function makeFoldIO_1(z, contFn, f) {
|
1034
|
+
return defer_1(() => new tsplus_module_3.Sink(foldIOReader(z(), contFn, f)), fileName_1 + ":1061:20");
|
1035
|
+
}
|
1036
|
+
|
1037
|
+
function foldChunkSplitIO(s, contFn, f, chunk, idx, len) {
|
1038
|
+
if (idx === len) {
|
1039
|
+
return tsplus_module_9.succeedNow([s, tsplus_module_16.nothing()], fileName_1 + ":1073:25");
|
1040
|
+
} else {
|
1041
|
+
return tsplus_module_9.flatMap_(f(s, tsplus_module_2.unsafeGet_(chunk, idx)), s1 => {
|
1042
|
+
if (contFn(s1)) {
|
1043
|
+
return foldChunkSplitIO(s1, contFn, f, chunk, idx + 1, len);
|
1044
|
+
} else {
|
1045
|
+
return tsplus_module_9.succeedNow([s1, tsplus_module_16.just(tsplus_module_2.drop_(chunk, idx + 1))], fileName_1 + ":1079:29");
|
1046
|
+
}
|
1047
|
+
}, fileName_1 + ":1075:36");
|
1048
|
+
}
|
1049
|
+
}
|
1050
|
+
|
1051
|
+
function foldIOReader(s, contFn, f) {
|
1052
|
+
if (!contFn(s)) {
|
1053
|
+
return tsplus_module_5.succeedNow(s);
|
1054
|
+
} else {
|
1055
|
+
return tsplus_module_4.readWith(inp => tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => foldChunkSplitIO(s, contFn, f, inp, 0, inp.length)), ([nextS, leftovers]) => tsplus_module_22.match_(leftovers, () => foldIOReader(nextS, contFn, f), l => tsplus_module_4.as_(tsplus_module_4.writeNow(l), () => nextS))), err => tsplus_module_4.failNow(err), _ => tsplus_module_5.succeedNow(_));
|
1056
|
+
}
|
1057
|
+
}
|
1058
|
+
/**
|
1059
|
+
* Creates a sink that effectfully folds elements of type `In` into a
|
1060
|
+
* structure of type `S` until `max` elements have been folded.
|
1061
|
+
*
|
1062
|
+
* Like {@link makeFoldWeightedIO}, but with a constant cost function of 1.
|
1063
|
+
*
|
1064
|
+
* @tsplus static fncts.io.SinkOps foldUntilIO
|
1065
|
+
*/
|
1066
|
+
|
1067
|
+
|
1068
|
+
function makeFoldUntilIO(z, max, f, __tsplusTrace) {
|
1069
|
+
return map_1(makeFoldIO_1(() => [z(), 0], ([_, n]) => n < max(), ([o, count], i) => tsplus_module_9.map_(f(o, i), s => [s, count + 1], __tsplusTrace)), ([s]) => s, __tsplusTrace);
|
1070
|
+
}
|
1071
|
+
/**
|
1072
|
+
* Creates a sink that folds elements of type `In` into a structure of type
|
1073
|
+
* `S`, until `max` worth of elements (determined by the `costFn`) have been
|
1074
|
+
* folded.
|
1075
|
+
*
|
1076
|
+
* The `decompose` function will be used for decomposing elements that cause
|
1077
|
+
* an `S` aggregate to cross `max` into smaller elements.
|
1078
|
+
*
|
1079
|
+
*
|
1080
|
+
* Be vigilant with this function, it has to generate "simpler" values or the
|
1081
|
+
* fold may never end. A value is considered indivisible if `decompose` yields
|
1082
|
+
* the empty chunk or a single-valued chunk. In these cases, there is no other
|
1083
|
+
* choice than to yield a value that will cross the threshold.
|
1084
|
+
*
|
1085
|
+
* The {@link makeFoldWeightedDecomposeIO} allows the decompose function to return a
|
1086
|
+
* `IO` value, and consequently it allows the sink to fail.
|
1087
|
+
*
|
1088
|
+
* @tsplus static fncts.io.SinkOps foldWeightedDecompose
|
1089
|
+
*/
|
1090
|
+
|
1091
|
+
|
1092
|
+
function makeFoldWeightedDecompose_1(z, costFn, max, decompose, f, __tsplusTrace) {
|
1093
|
+
return defer_1(() => {
|
1094
|
+
/**
|
1095
|
+
* @tsplus tailRec
|
1096
|
+
*/
|
1097
|
+
function fold(inp, s, max, dirty, cost, idx) {
|
1098
|
+
if (idx === inp.length) {
|
1099
|
+
return [s, cost, dirty, tsplus_module_1.empty()];
|
1100
|
+
} else {
|
1101
|
+
const elem = tsplus_module_2.unsafeGet_(inp, idx);
|
1102
|
+
const total = cost + costFn(s, elem);
|
1103
|
+
|
1104
|
+
if (total <= max) {
|
1105
|
+
return fold(inp, f(s, elem), max, true, total, idx + 1);
|
1106
|
+
} else {
|
1107
|
+
const decomposed = decompose(elem);
|
1108
|
+
|
1109
|
+
if (decomposed.length <= 1 && !dirty) {
|
1110
|
+
return [f(s, elem), total, true, tsplus_module_2.drop_(inp, idx + 1)];
|
1111
|
+
} else if (decomposed.length <= 1 && dirty) {
|
1112
|
+
return [s, cost, dirty, tsplus_module_2.drop_(inp, idx)];
|
1113
|
+
} else {
|
1114
|
+
return fold(tsplus_module_2.concat_(decomposed, tsplus_module_2.drop_(inp, idx + 1)), s, max, dirty, cost, 0);
|
1115
|
+
}
|
1116
|
+
}
|
1117
|
+
}
|
1118
|
+
}
|
1119
|
+
|
1120
|
+
function go(s, cost, dirty, max) {
|
1121
|
+
return tsplus_module_4.readWith(inp => {
|
1122
|
+
const [nextS, nextCost, nextDirty, leftovers] = fold(inp, s, max, dirty, cost, 0);
|
1123
|
+
|
1124
|
+
if (tsplus_module_2.isNonEmpty(leftovers)) {
|
1125
|
+
return tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftovers), tsplus_module_5.succeedNow(nextS));
|
1126
|
+
} else if (cost > max) {
|
1127
|
+
return tsplus_module_5.succeedNow(nextS);
|
1128
|
+
} else {
|
1129
|
+
return go(nextS, nextCost, nextDirty, max);
|
1130
|
+
}
|
1131
|
+
}, err => tsplus_module_4.failNow(err), _ => tsplus_module_5.succeedNow(s));
|
1132
|
+
}
|
1133
|
+
|
1134
|
+
return new tsplus_module_3.Sink(go(z(), 0, false, max()));
|
1135
|
+
}, __tsplusTrace);
|
1136
|
+
}
|
1137
|
+
/**
|
1138
|
+
* Creates a sink that effectfully folds elements of type `In` into a
|
1139
|
+
* structure of type `S`, until `max` worth of elements (determined by the
|
1140
|
+
* `costFn`) have been folded.
|
1141
|
+
*
|
1142
|
+
* The `decompose` function will be used for decomposing elements that cause
|
1143
|
+
* an `S` aggregate to cross `max` into smaller elements. Be vigilant with
|
1144
|
+
* this function, it has to generate "simpler" values or the fold may never
|
1145
|
+
* end. A value is considered indivisible if `decompose` yields the empty
|
1146
|
+
* chunk or a single-valued chunk. In these cases, there is no other choice
|
1147
|
+
* than to yield a value that will cross the threshold.
|
1148
|
+
*
|
1149
|
+
* @tsplus static fncts.io.SinkOps foldWeightedDecomposeIO
|
1150
|
+
*/
|
1151
|
+
|
1152
|
+
|
1153
|
+
function makeFoldWeightedDecomposeIO_1(z, costFn, max, decompose, f, __tsplusTrace) {
|
1154
|
+
return defer_1(() => {
|
1155
|
+
function fold(inp, s, max, dirty, cost, idx) {
|
1156
|
+
if (idx === inp.length) {
|
1157
|
+
return tsplus_module_9.succeedNow([s, cost, dirty, tsplus_module_1.empty()], __tsplusTrace);
|
1158
|
+
} else {
|
1159
|
+
const elem = tsplus_module_2.unsafeGet_(inp, idx);
|
1160
|
+
return tsplus_module_9.flatMap_(tsplus_module_9.map_(costFn(s, elem), _ => cost + _, __tsplusTrace), total => {
|
1161
|
+
if (total <= max) {
|
1162
|
+
return tsplus_module_9.flatMap_(f(s, elem), s => fold(inp, s, max, true, total, idx + 1), __tsplusTrace);
|
1163
|
+
} else {
|
1164
|
+
return tsplus_module_9.flatMap_(decompose(elem), decomposed => {
|
1165
|
+
if (decomposed.length <= 1 && !dirty) {
|
1166
|
+
return tsplus_module_9.map_(f(s, elem), s => [s, total, true, tsplus_module_2.drop_(inp, idx + 1)], __tsplusTrace);
|
1167
|
+
} else if (decomposed.length <= 1 && dirty) {
|
1168
|
+
return tsplus_module_9.succeedNow([s, cost, dirty, tsplus_module_2.drop_(inp, idx)], __tsplusTrace);
|
1169
|
+
} else {
|
1170
|
+
return fold(tsplus_module_2.concat_(decomposed, tsplus_module_2.drop_(inp, idx + 1)), s, max, dirty, cost, 0);
|
1171
|
+
}
|
1172
|
+
}, __tsplusTrace);
|
1173
|
+
}
|
1174
|
+
}, __tsplusTrace);
|
1175
|
+
}
|
1176
|
+
}
|
1177
|
+
|
1178
|
+
function go(s, cost, dirty, max) {
|
1179
|
+
return tsplus_module_4.readWith(inp => tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => fold(inp, s, max, dirty, cost, 0)), ([nextS, nextCost, nextDirty, leftovers]) => {
|
1180
|
+
if (tsplus_module_2.isNonEmpty(leftovers)) {
|
1181
|
+
return tsplus_module_5.apSecond_(tsplus_module_4.writeNow(leftovers), tsplus_module_5.succeedNow(nextS));
|
1182
|
+
} else if (cost > max) {
|
1183
|
+
return tsplus_module_5.succeedNow(nextS);
|
1184
|
+
} else {
|
1185
|
+
return go(nextS, nextCost, nextDirty, max);
|
1186
|
+
}
|
1187
|
+
}), err => tsplus_module_4.failNow(err), _ => tsplus_module_5.succeedNow(s));
|
1188
|
+
}
|
1189
|
+
|
1190
|
+
return new tsplus_module_3.Sink(go(z(), 0, false, max()));
|
1191
|
+
}, __tsplusTrace);
|
1192
|
+
}
|
1193
|
+
/**
|
1194
|
+
* Creates a sink that folds elements of type `In` into a structure of type
|
1195
|
+
* `S`, until `max` worth of elements (determined by the `costFn`) have been
|
1196
|
+
* folded.
|
1197
|
+
*
|
1198
|
+
* @note
|
1199
|
+
* Elements that have an individual cost larger than `max` will force the
|
1200
|
+
* sink to cross the `max` cost. See {@link makeFoldWeightedDecompose} for a variant
|
1201
|
+
* that can handle these cases.
|
1202
|
+
*
|
1203
|
+
* @tsplus static fncts.io.SinkOps foldWeighted
|
1204
|
+
*/
|
1205
|
+
|
1206
|
+
|
1207
|
+
function makeFoldWeighted(z, costFn, max, f, __tsplusTrace) {
|
1208
|
+
return makeFoldWeightedDecompose_1(z, costFn, max, tsplus_module_24.single, f, __tsplusTrace);
|
1209
|
+
}
|
1210
|
+
/**
|
1211
|
+
* Creates a sink that effectfully folds elements of type `In` into a
|
1212
|
+
* structure of type `S`, until `max` worth of elements (determined by the
|
1213
|
+
* `costFn`) have been folded.
|
1214
|
+
*
|
1215
|
+
* @note
|
1216
|
+
* Elements that have an individual cost larger than `max` will force the
|
1217
|
+
* sink to cross the `max` cost. See {@link makeFoldWeightedDecomposeIO} for a
|
1218
|
+
* variant that can handle these cases.
|
1219
|
+
*
|
1220
|
+
* @tsplus static fncts.io.SinkOps foldWeightedIO
|
1221
|
+
*/
|
1222
|
+
|
1223
|
+
|
1224
|
+
function makeFoldWeightedIO(z, costFn, max, f, __tsplusTrace) {
|
1225
|
+
return makeFoldWeightedDecomposeIO_1(z, costFn, max, inp => tsplus_module_9.succeedNow(tsplus_module_24.single(inp), __tsplusTrace), f, __tsplusTrace);
|
1226
|
+
}
|
1227
|
+
/**
|
1228
|
+
* Transforms this sink's result.
|
1229
|
+
*
|
1230
|
+
* @tsplus fluent fncts.io.Sink map
|
1231
|
+
*/
|
1232
|
+
|
1233
|
+
|
1234
|
+
function map_1(self, f, __tsplusTrace) {
|
1235
|
+
return new tsplus_module_3.Sink(tsplus_module_5.map_(self.channel, f));
|
1236
|
+
}
|
1237
|
+
/**
|
1238
|
+
* Transforms the errors emitted by this sink using `f`.
|
1239
|
+
*
|
1240
|
+
* @tsplus fluent fncts.io.Sink mapError
|
1241
|
+
*/
|
1242
|
+
|
1243
|
+
|
1244
|
+
function mapError_(self, f, __tsplusTrace) {
|
1245
|
+
return new tsplus_module_3.Sink(tsplus_module_4.mapError_(self.channel, f));
|
1246
|
+
}
|
1247
|
+
/**
|
1248
|
+
* Effectfully transforms this sink's result.
|
1249
|
+
*
|
1250
|
+
* @tsplus fluent fncts.io.Sink mapIO
|
1251
|
+
*/
|
1252
|
+
|
1253
|
+
|
1254
|
+
function mapIO_1(self, f, __tsplusTrace) {
|
1255
|
+
return new tsplus_module_3.Sink(tsplus_module_4.mapIO_(self.channel, f));
|
1256
|
+
}
|
1257
|
+
/**
|
1258
|
+
* Runs this sink until it yields a result, then uses that result to create
|
1259
|
+
* another sink from the provided function which will continue to run until it
|
1260
|
+
* yields a result.
|
1261
|
+
*
|
1262
|
+
* This function essentially runs sinks in sequence.
|
1263
|
+
*
|
1264
|
+
* @tsplus fluent fncts.io.Sink matchSink
|
1265
|
+
*/
|
1266
|
+
|
1267
|
+
|
1268
|
+
function matchSink_1(self, onFailure, onSuccess, __tsplusTrace) {
|
1269
|
+
return new tsplus_module_3.Sink(tsplus_module_4.matchChannel_(tsplus_module_4.doneCollect(self.channel), e => onFailure(e).channel, ([leftovers, z]) => tsplus_module_4.defer(() => {
|
1270
|
+
const leftoversRef = new _AtomicReference.AtomicReference(tsplus_module_2.filter_(leftovers, c => tsplus_module_2.isNonEmpty(c)));
|
1271
|
+
const refReader = tsplus_module_5.flatMap_(tsplus_module_5.succeed(() => leftoversRef.getAndSet(tsplus_module_1.empty())), chunk => tsplus_module_4.writeChunk(chunk));
|
1272
|
+
const passthrough = tsplus_module_4.id();
|
1273
|
+
const continuationSink = tsplus_module_4.pipeTo_(tsplus_module_5.apSecond_(refReader, passthrough), onSuccess(z).channel);
|
1274
|
+
return tsplus_module_5.flatMap_(tsplus_module_4.doneCollect(continuationSink), ([newLeftovers, z1]) => tsplus_module_5.apSecond_(tsplus_module_5.flatMap_(tsplus_module_5.succeed(() => leftoversRef.get), tsplus_module_4.writeChunk), tsplus_module_4.as_(tsplus_module_4.writeChunk(newLeftovers), () => z1)));
|
1275
|
+
})));
|
1276
|
+
}
|
1277
|
+
/**
|
1278
|
+
* Switch to another sink in case of failure
|
1279
|
+
*
|
1280
|
+
* @tsplus fluent fncts.io.Sink orElse
|
1281
|
+
*/
|
1282
|
+
|
1283
|
+
|
1284
|
+
function orElse(self, that, __tsplusTrace) {
|
1285
|
+
return defer_1(() => new tsplus_module_3.Sink(tsplus_module_4.orElse_(self.channel, that().channel)), __tsplusTrace);
|
1286
|
+
}
|
1287
|
+
/**
|
1288
|
+
* Provides the sink with its required environment, which eliminates its
|
1289
|
+
* dependency on `R`.
|
1290
|
+
*
|
1291
|
+
* @tsplus fluent fncts.io.Sink provideEnvironment
|
1292
|
+
*/
|
1293
|
+
|
1294
|
+
|
1295
|
+
function provideEnvironment(self, r, __tsplusTrace) {
|
1296
|
+
return new tsplus_module_3.Sink(tsplus_module_4.provideEnvironment_(self.channel, r));
|
1297
|
+
}
|
1298
|
+
/**
|
1299
|
+
* Runs both sinks in parallel on the input, returning the result or the
|
1300
|
+
* error from the one that finishes first.
|
1301
|
+
*
|
1302
|
+
* @tsplus fluent fncts.io.Sink race
|
1303
|
+
*/
|
1304
|
+
|
1305
|
+
|
1306
|
+
function race(self, that, __tsplusTrace) {
|
1307
|
+
return map_1(raceBoth_1(self, that), result => tsplus_module_25.merge(result), __tsplusTrace);
|
1308
|
+
}
|
1309
|
+
/**
|
1310
|
+
* Runs both sinks in parallel on the input, returning the result or the error
|
1311
|
+
* from the one that finishes first.
|
1312
|
+
*
|
1313
|
+
* @tsplus fluent fncts.io.Sink raceBoth
|
1314
|
+
*/
|
1315
|
+
|
1316
|
+
|
1317
|
+
function raceBoth_1(self, that, capacity = () => 16, __tsplusTrace) {
|
1318
|
+
return raceWith_1(self, that, selfDone => tsplus_module_27.done(tsplus_module_9.map_(tsplus_module_9.fromExitNow(selfDone, __tsplusTrace), tsplus_module_26.left, __tsplusTrace)), thatDone => tsplus_module_27.done(tsplus_module_9.map_(tsplus_module_9.fromExitNow(thatDone, __tsplusTrace), tsplus_module_26.right, __tsplusTrace)), capacity, __tsplusTrace);
|
1319
|
+
}
|
1320
|
+
/**
|
1321
|
+
* Runs both sinks in parallel on the input, using the specified merge
|
1322
|
+
* function as soon as one result or the other has been computed.
|
1323
|
+
*
|
1324
|
+
* @tsplus fluent fncts.io.Sink raceWith
|
1325
|
+
*/
|
1326
|
+
|
1327
|
+
|
1328
|
+
function raceWith_1(self, that, leftDone, rightDone, capacity = () => 16, __tsplusTrace) {
|
1329
|
+
const scoped = tsplus_module_9.defer(() => {
|
1330
|
+
const that0 = that();
|
1331
|
+
const capacity0 = capacity();
|
1332
|
+
return tsplus_module_9.flatMap_(tsplus_module_29.makeBounded(capacity()), hub => tsplus_module_9.flatMap_(tsplus_module_4.fromHubScoped(() => hub), c1 => tsplus_module_9.map_(tsplus_module_4.fromHubScoped(() => hub), c2 => {
|
1333
|
+
const reader = tsplus_module_4.toHub(() => hub);
|
1334
|
+
const writer = tsplus_module_28.mergeWith_(tsplus_module_4.pipeTo_(c1, self.channel), tsplus_module_4.pipeTo_(c2, that0.channel), leftDone, rightDone);
|
1335
|
+
const channel = tsplus_module_28.mergeWith_(reader, writer, () => tsplus_module_27.wait(tsplus_module_9.fromExitNow), done => tsplus_module_27.done(tsplus_module_9.fromExitNow(done, __tsplusTrace)));
|
1336
|
+
return new tsplus_module_3.Sink(channel);
|
1337
|
+
}, __tsplusTrace), __tsplusTrace), __tsplusTrace);
|
1338
|
+
}, __tsplusTrace);
|
1339
|
+
return unwrapScoped_1(() => scoped, __tsplusTrace);
|
1340
|
+
}
|
1341
|
+
/**
|
1342
|
+
* Accesses the specified service in the environment of the effect.
|
1343
|
+
*
|
1344
|
+
* @tsplus static fncts.io.SinkOps service
|
1345
|
+
*/
|
1346
|
+
|
1347
|
+
|
1348
|
+
function service(
|
1349
|
+
/** @tsplus auto */
|
1350
|
+
tag) {
|
1351
|
+
const tag_1 = tag;
|
1352
|
+
return serviceWith_1(tsplus_module_14.identity, tag_1);
|
1353
|
+
}
|
1354
|
+
/**
|
1355
|
+
* Accesses the specified service in the environment of the sink.
|
1356
|
+
*
|
1357
|
+
* @tsplus static fncts.io.SinkOps serviceWith
|
1358
|
+
*/
|
1359
|
+
|
1360
|
+
|
1361
|
+
function serviceWith_1(f,
|
1362
|
+
/** @tsplus auto */
|
1363
|
+
tag) {
|
1364
|
+
return fromIO_1(() => tsplus_module_13.serviceWith(f, tag), fileName_1 + ":1526:21");
|
1365
|
+
}
|
1366
|
+
/**
|
1367
|
+
* Accesses the specified service in the environment of the sink in the
|
1368
|
+
* context of an effect.
|
1369
|
+
*
|
1370
|
+
* @tsplus static fncts.io.SinkOps serviceWithIO
|
1371
|
+
*/
|
1372
|
+
|
1373
|
+
|
1374
|
+
function serviceWithIO(f,
|
1375
|
+
/** @tsplus auto */
|
1376
|
+
tag) {
|
1377
|
+
return fromIO_1(() => tsplus_module_13.serviceWithIO(f, tag, fileName_1 + ":1539:38"), fileName_1 + ":1539:21");
|
1378
|
+
}
|
1379
|
+
/**
|
1380
|
+
* Accesses the specified service in the environment of the sink in the
|
1381
|
+
* context of a sink.
|
1382
|
+
*
|
1383
|
+
* @tsplus static fncts.io.SinkOps serviceWithSink
|
1384
|
+
*/
|
1385
|
+
|
1386
|
+
|
1387
|
+
function serviceWithSink(f,
|
1388
|
+
/** @tsplus auto */
|
1389
|
+
tag) {
|
1390
|
+
return new tsplus_module_3.Sink(tsplus_module_4.unwrap(() => tsplus_module_13.serviceWith(tsplus_module_14.compose_(f, s => s.channel), tag)));
|
1391
|
+
}
|
1392
|
+
/**
|
1393
|
+
* Splits the sink on the specified predicate, returning a new sink that
|
1394
|
+
* consumes elements until an element after the first satisfies the specified
|
1395
|
+
* predicate.
|
1396
|
+
*
|
1397
|
+
* @tsplus fluent fncts.io.Sink splitWhere
|
1398
|
+
*/
|
1399
|
+
|
1400
|
+
|
1401
|
+
function splitWhere(self, p, __tsplusTrace) {
|
1402
|
+
return new tsplus_module_3.Sink(tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => tsplus_module_8.make(() => tsplus_module_1.empty())), ref => tsplus_module_5.flatMap_(tsplus_module_4.collectElements(tsplus_module_4.pipeToOrFail_(splitter(p, false, ref), self.channel)), ([leftovers, z]) => tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => tsplus_module_7.get(ref)), leftover => tsplus_module_5.apSecond_(tsplus_module_4.writeNow(tsplus_module_2.concat_(leftover, tsplus_module_2.flatten(leftovers))), tsplus_module_5.succeedNow(z))))));
|
1403
|
+
}
|
1404
|
+
|
1405
|
+
function splitter(p, written, leftovers) {
|
1406
|
+
return tsplus_module_4.readWithCause(inp => {
|
1407
|
+
if (tsplus_module_2.isEmpty(inp)) {
|
1408
|
+
return splitter(p, written, leftovers);
|
1409
|
+
} else if (written) {
|
1410
|
+
const index = tsplus_module_30.findIndex(inp, p);
|
1411
|
+
|
1412
|
+
if (index === -1) {
|
1413
|
+
return tsplus_module_5.apSecond_(tsplus_module_4.writeNow(inp), splitter(p, true, leftovers));
|
1414
|
+
} else {
|
1415
|
+
const [left, right] = tsplus_module_2.splitAt_(inp, index);
|
1416
|
+
return tsplus_module_5.apSecond_(tsplus_module_4.writeNow(left), tsplus_module_4.fromIO(() => tsplus_module_6.set_(leftovers, right)));
|
1417
|
+
}
|
1418
|
+
} else {
|
1419
|
+
const index = tsplus_module_30.findIndex(inp, p);
|
1420
|
+
|
1421
|
+
if (index === -1) {
|
1422
|
+
return tsplus_module_5.apSecond_(tsplus_module_4.writeNow(inp), splitter(p, true, leftovers));
|
1423
|
+
} else {
|
1424
|
+
const [left, right] = tsplus_module_2.splitAt_(inp, Math.max(index, 1));
|
1425
|
+
return tsplus_module_5.apSecond_(tsplus_module_4.writeNow(left), tsplus_module_4.fromIO(() => tsplus_module_6.set_(leftovers, right)));
|
1426
|
+
}
|
1427
|
+
}
|
1428
|
+
}, tsplus_module_5.failCauseNow, tsplus_module_5.succeedNow);
|
1429
|
+
}
|
1430
|
+
/**
|
1431
|
+
* A sink that immediately ends with the specified value.
|
1432
|
+
*
|
1433
|
+
* @tsplus static fncts.io.SinkOps succeed
|
1434
|
+
*/
|
1435
|
+
|
1436
|
+
|
1437
|
+
function succeed(z, __tsplusTrace) {
|
1438
|
+
return new tsplus_module_3.Sink(tsplus_module_5.succeed(z));
|
1439
|
+
}
|
1440
|
+
/**
|
1441
|
+
* A sink that immediately ends with the specified value.
|
1442
|
+
*
|
1443
|
+
* @tsplus static fncts.io.SinkOps succeedNow
|
1444
|
+
*/
|
1445
|
+
|
1446
|
+
|
1447
|
+
function succeedNow(z, __tsplusTrace) {
|
1448
|
+
return new tsplus_module_3.Sink(tsplus_module_5.succeedNow(z));
|
1449
|
+
}
|
1450
|
+
/**
|
1451
|
+
* Summarize a sink by running an effect when the sink starts and again when
|
1452
|
+
* it completes
|
1453
|
+
*
|
1454
|
+
* @tsplus fluent fncts.io.Sink summarized
|
1455
|
+
*/
|
1456
|
+
|
1457
|
+
|
1458
|
+
function summarized_1(self, summary, f, __tsplusTrace) {
|
1459
|
+
return new tsplus_module_3.Sink(tsplus_module_4.unwrap(() => tsplus_module_9.map_(tsplus_module_9.succeed(summary, __tsplusTrace), summary => tsplus_module_5.flatMap_(tsplus_module_4.fromIO(() => summary), start => tsplus_module_5.flatMap_(self.channel, done => tsplus_module_5.map_(tsplus_module_4.fromIO(() => summary), end => [done, f(start, end)]))), __tsplusTrace)));
|
1460
|
+
}
|
1461
|
+
/**
|
1462
|
+
* @tsplus getter fncts.io.Sink timed
|
1463
|
+
*/
|
1464
|
+
|
1465
|
+
|
1466
|
+
function timed(self, __tsplusTrace) {
|
1467
|
+
return summarized_1(self, () => tsplus_module_31.currentTime, (start, end) => tsplus_module_32.fromInterval(start, end), __tsplusTrace);
|
1468
|
+
}
|
1469
|
+
/**
|
1470
|
+
* Creates a sink produced from an effect.
|
1471
|
+
*
|
1472
|
+
* @tsplus static fncts.io.SinkOps unwrap
|
1473
|
+
*/
|
1474
|
+
|
1475
|
+
|
1476
|
+
function unwrap_1(io) {
|
1477
|
+
return new tsplus_module_3.Sink(tsplus_module_4.unwrap(() => tsplus_module_9.map_(io(), sink => sink.channel, fileName_1 + ":1678:42")));
|
1478
|
+
}
|
1479
|
+
/**
|
1480
|
+
* Creates a sink produced from a scoped effect.
|
1481
|
+
*
|
1482
|
+
* @tsplus static fncts.io.SinkOps unwrapScoped
|
1483
|
+
*/
|
1484
|
+
|
1485
|
+
|
1486
|
+
function unwrapScoped_1(scoped, __tsplusTrace) {
|
1487
|
+
return new tsplus_module_3.Sink(tsplus_module_4.unwrapScoped(() => tsplus_module_9.map_(scoped(), sink => sink.channel, __tsplusTrace)));
|
1488
|
+
}
|
1489
|
+
/**
|
1490
|
+
* Feeds inputs to this sink until it yields a result, then switches over to
|
1491
|
+
* the provided sink until it yields a result, finally combining the two
|
1492
|
+
* results into a tuple.
|
1493
|
+
*
|
1494
|
+
* @tsplus fluent fncts.io.Sink zip
|
1495
|
+
*/
|
1496
|
+
|
1497
|
+
|
1498
|
+
function zip(self, that, __tsplusTrace) {
|
1499
|
+
return zipWith_1(() => self, that, tsplus_module_14.tuple, __tsplusTrace);
|
1500
|
+
}
|
1501
|
+
/**
|
1502
|
+
* Runs both sinks in parallel on the input and combines the results in a
|
1503
|
+
* tuple.
|
1504
|
+
*
|
1505
|
+
* @tsplus fluent fncts.io.Sink zipC
|
1506
|
+
*/
|
1507
|
+
|
1508
|
+
|
1509
|
+
function zipC(self, that, __tsplusTrace) {
|
1510
|
+
return zipWithC_1(() => self, that, tsplus_module_14.tuple, __tsplusTrace);
|
1511
|
+
}
|
1512
|
+
/**
|
1513
|
+
* Feeds inputs to this sink until it yields a result, then switches over to
|
1514
|
+
* the provided sink until it yields a result, finally combining the two
|
1515
|
+
* results with `f`.
|
1516
|
+
*
|
1517
|
+
* @tsplus fluent fncts.io.Sink zipWith
|
1518
|
+
*/
|
1519
|
+
|
1520
|
+
|
1521
|
+
function zipWith_1(self, that, f, __tsplusTrace) {
|
1522
|
+
return defer_1(() => flatMap_1(self(), z => map_1(that(), z1 => f(z, z1), __tsplusTrace), __tsplusTrace), __tsplusTrace);
|
1523
|
+
}
|
1524
|
+
/**
|
1525
|
+
* Runs both sinks in parallel on the input and combines the results using the
|
1526
|
+
* provided function.
|
1527
|
+
*
|
1528
|
+
* @tsplus fluent fncts.io.Sink zipWithC
|
95
1529
|
*/
|
96
1530
|
|
97
1531
|
|
98
|
-
function
|
99
|
-
|
100
|
-
return new tsplus_module_4.Sink(process);
|
1532
|
+
function zipWithC_1(self, that, f, __tsplusTrace) {
|
1533
|
+
return defer_1(() => raceWith_1(self(), () => that(), exit => tsplus_module_33.match_(exit, err => tsplus_module_27.done(tsplus_module_9.failCauseNow(err, __tsplusTrace)), lz => tsplus_module_27.wait(exit => tsplus_module_33.match_(exit, cause => tsplus_module_9.failCauseNow(cause, __tsplusTrace), rz => tsplus_module_9.succeedNow(f(lz, rz), __tsplusTrace)))), exit => tsplus_module_33.match_(exit, err => tsplus_module_27.done(tsplus_module_9.failCauseNow(err, __tsplusTrace)), rz => tsplus_module_27.wait(exit => tsplus_module_33.match_(exit, cause => tsplus_module_9.failCauseNow(cause, __tsplusTrace), lz => tsplus_module_9.succeedNow(f(lz, rz), __tsplusTrace))))), __tsplusTrace);
|
101
1534
|
}
|
102
1535
|
//# sourceMappingURL=api.cjs.map
|