@clayroach/effect 3.19.14-source-capture.6 → 3.19.14-source-capture.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Utils.js +1 -1
- package/dist/cjs/Utils.js.map +1 -1
- package/dist/cjs/internal/clock.js +1 -1
- package/dist/cjs/internal/clock.js.map +1 -1
- package/dist/esm/Utils.js +1 -1
- package/dist/esm/Utils.js.map +1 -1
- package/dist/esm/internal/clock.js +1 -1
- package/dist/esm/internal/clock.js.map +1 -1
- package/package.json +1 -1
- package/src/Arbitrary.ts +0 -1101
- package/src/Array.ts +0 -3589
- package/src/BigDecimal.ts +0 -1349
- package/src/BigInt.ts +0 -643
- package/src/Boolean.ts +0 -287
- package/src/Brand.ts +0 -360
- package/src/Cache.ts +0 -281
- package/src/Cause.ts +0 -1555
- package/src/Channel.ts +0 -2355
- package/src/ChildExecutorDecision.ts +0 -146
- package/src/Chunk.ts +0 -1495
- package/src/Clock.ts +0 -111
- package/src/Config.ts +0 -542
- package/src/ConfigError.ts +0 -270
- package/src/ConfigProvider.ts +0 -333
- package/src/ConfigProviderPathPatch.ts +0 -100
- package/src/Console.ts +0 -226
- package/src/Context.ts +0 -585
- package/src/Cron.ts +0 -706
- package/src/Data.ts +0 -596
- package/src/DateTime.ts +0 -1686
- package/src/DefaultServices.ts +0 -34
- package/src/Deferred.ts +0 -301
- package/src/Differ.ts +0 -450
- package/src/Duration.ts +0 -1000
- package/src/Effect.ts +0 -14839
- package/src/Effectable.ts +0 -107
- package/src/Either.ts +0 -1040
- package/src/Encoding.ts +0 -195
- package/src/Equal.ts +0 -98
- package/src/Equivalence.ts +0 -235
- package/src/ExecutionPlan.ts +0 -308
- package/src/ExecutionStrategy.ts +0 -119
- package/src/Exit.ts +0 -467
- package/src/FastCheck.ts +0 -9
- package/src/Fiber.ts +0 -744
- package/src/FiberHandle.ts +0 -540
- package/src/FiberId.ts +0 -195
- package/src/FiberMap.ts +0 -656
- package/src/FiberRef.ts +0 -431
- package/src/FiberRefs.ts +0 -204
- package/src/FiberRefsPatch.ts +0 -105
- package/src/FiberSet.ts +0 -491
- package/src/FiberStatus.ts +0 -108
- package/src/Function.ts +0 -1222
- package/src/GlobalValue.ts +0 -53
- package/src/Graph.ts +0 -3732
- package/src/GroupBy.ts +0 -103
- package/src/HKT.ts +0 -45
- package/src/Hash.ts +0 -195
- package/src/HashMap.ts +0 -519
- package/src/HashRing.ts +0 -317
- package/src/HashSet.ts +0 -2346
- package/src/Inspectable.ts +0 -287
- package/src/Iterable.ts +0 -1119
- package/src/JSONSchema.ts +0 -1044
- package/src/KeyedPool.ts +0 -167
- package/src/Layer.ts +0 -1251
- package/src/LayerMap.ts +0 -436
- package/src/List.ts +0 -977
- package/src/LogLevel.ts +0 -285
- package/src/LogSpan.ts +0 -25
- package/src/Logger.ts +0 -702
- package/src/Mailbox.ts +0 -268
- package/src/ManagedRuntime.ts +0 -180
- package/src/Match.ts +0 -1477
- package/src/MergeDecision.ts +0 -95
- package/src/MergeState.ts +0 -172
- package/src/MergeStrategy.ts +0 -107
- package/src/Metric.ts +0 -780
- package/src/MetricBoundaries.ts +0 -69
- package/src/MetricHook.ts +0 -151
- package/src/MetricKey.ts +0 -224
- package/src/MetricKeyType.ts +0 -262
- package/src/MetricLabel.ts +0 -47
- package/src/MetricPair.ts +0 -71
- package/src/MetricPolling.ts +0 -148
- package/src/MetricRegistry.ts +0 -48
- package/src/MetricState.ts +0 -257
- package/src/Micro.ts +0 -4405
- package/src/ModuleVersion.ts +0 -18
- package/src/MutableHashMap.ts +0 -411
- package/src/MutableHashSet.ts +0 -706
- package/src/MutableList.ts +0 -297
- package/src/MutableQueue.ts +0 -227
- package/src/MutableRef.ts +0 -202
- package/src/NonEmptyIterable.ts +0 -32
- package/src/Number.ts +0 -1071
- package/src/Option.ts +0 -2170
- package/src/Order.ts +0 -373
- package/src/Ordering.ts +0 -111
- package/src/ParseResult.ts +0 -2031
- package/src/PartitionedSemaphore.ts +0 -200
- package/src/Pipeable.ts +0 -566
- package/src/Pool.ts +0 -204
- package/src/Predicate.ts +0 -1405
- package/src/Pretty.ts +0 -205
- package/src/PrimaryKey.ts +0 -23
- package/src/PubSub.ts +0 -182
- package/src/Queue.ts +0 -644
- package/src/Random.ts +0 -204
- package/src/RateLimiter.ts +0 -138
- package/src/RcMap.ts +0 -141
- package/src/RcRef.ts +0 -122
- package/src/Readable.ts +0 -93
- package/src/Record.ts +0 -1274
- package/src/RedBlackTree.ts +0 -421
- package/src/Redacted.ts +0 -144
- package/src/Ref.ts +0 -180
- package/src/RegExp.ts +0 -38
- package/src/Reloadable.ts +0 -127
- package/src/Request.ts +0 -347
- package/src/RequestBlock.ts +0 -118
- package/src/RequestResolver.ts +0 -366
- package/src/Resource.ts +0 -119
- package/src/Runtime.ts +0 -383
- package/src/RuntimeFlags.ts +0 -368
- package/src/RuntimeFlagsPatch.ts +0 -183
- package/src/STM.ts +0 -2045
- package/src/Schedule.ts +0 -2219
- package/src/ScheduleDecision.ts +0 -62
- package/src/ScheduleInterval.ts +0 -151
- package/src/ScheduleIntervals.ts +0 -122
- package/src/Scheduler.ts +0 -353
- package/src/Schema.ts +0 -10914
- package/src/SchemaAST.ts +0 -3043
- package/src/Scope.ts +0 -204
- package/src/ScopedCache.ts +0 -151
- package/src/ScopedRef.ts +0 -117
- package/src/Secret.ts +0 -88
- package/src/SingleProducerAsyncInput.ts +0 -67
- package/src/Sink.ts +0 -1461
- package/src/SortedMap.ts +0 -287
- package/src/SortedSet.ts +0 -390
- package/src/Stream.ts +0 -6468
- package/src/StreamEmit.ts +0 -136
- package/src/StreamHaltStrategy.ts +0 -123
- package/src/Streamable.ts +0 -45
- package/src/String.ts +0 -778
- package/src/Struct.ts +0 -243
- package/src/Subscribable.ts +0 -100
- package/src/SubscriptionRef.ts +0 -298
- package/src/Supervisor.ts +0 -240
- package/src/Symbol.ts +0 -29
- package/src/SynchronizedRef.ts +0 -270
- package/src/TArray.ts +0 -495
- package/src/TDeferred.ts +0 -100
- package/src/TMap.ts +0 -515
- package/src/TPriorityQueue.ts +0 -223
- package/src/TPubSub.ts +0 -200
- package/src/TQueue.ts +0 -432
- package/src/TRandom.ts +0 -129
- package/src/TReentrantLock.ts +0 -224
- package/src/TRef.ts +0 -178
- package/src/TSemaphore.ts +0 -129
- package/src/TSet.ts +0 -365
- package/src/TSubscriptionRef.ts +0 -192
- package/src/Take.ts +0 -258
- package/src/TestAnnotation.ts +0 -158
- package/src/TestAnnotationMap.ts +0 -119
- package/src/TestAnnotations.ts +0 -117
- package/src/TestClock.ts +0 -556
- package/src/TestConfig.ts +0 -47
- package/src/TestContext.ts +0 -36
- package/src/TestLive.ts +0 -53
- package/src/TestServices.ts +0 -390
- package/src/TestSized.ts +0 -55
- package/src/Tracer.ts +0 -198
- package/src/Trie.ts +0 -840
- package/src/Tuple.ts +0 -305
- package/src/Types.ts +0 -353
- package/src/Unify.ts +0 -113
- package/src/UpstreamPullRequest.ts +0 -117
- package/src/UpstreamPullStrategy.ts +0 -121
- package/src/Utils.ts +0 -809
- package/src/index.ts +0 -1561
- package/src/internal/array.ts +0 -8
- package/src/internal/blockedRequests.ts +0 -520
- package/src/internal/cache.ts +0 -733
- package/src/internal/cause.ts +0 -1050
- package/src/internal/channel/channelExecutor.ts +0 -1200
- package/src/internal/channel/channelState.ts +0 -134
- package/src/internal/channel/childExecutorDecision.ts +0 -96
- package/src/internal/channel/continuation.ts +0 -200
- package/src/internal/channel/mergeDecision.ts +0 -113
- package/src/internal/channel/mergeState.ts +0 -120
- package/src/internal/channel/mergeStrategy.ts +0 -72
- package/src/internal/channel/singleProducerAsyncInput.ts +0 -259
- package/src/internal/channel/subexecutor.ts +0 -229
- package/src/internal/channel/upstreamPullRequest.ts +0 -84
- package/src/internal/channel/upstreamPullStrategy.ts +0 -87
- package/src/internal/channel.ts +0 -2603
- package/src/internal/clock.ts +0 -95
- package/src/internal/completedRequestMap.ts +0 -9
- package/src/internal/concurrency.ts +0 -54
- package/src/internal/config.ts +0 -716
- package/src/internal/configError.ts +0 -304
- package/src/internal/configProvider/pathPatch.ts +0 -97
- package/src/internal/configProvider.ts +0 -799
- package/src/internal/console.ts +0 -153
- package/src/internal/context.ts +0 -337
- package/src/internal/core-effect.ts +0 -2293
- package/src/internal/core-stream.ts +0 -998
- package/src/internal/core.ts +0 -3273
- package/src/internal/data.ts +0 -36
- package/src/internal/dataSource.ts +0 -327
- package/src/internal/dateTime.ts +0 -1277
- package/src/internal/defaultServices/console.ts +0 -100
- package/src/internal/defaultServices.ts +0 -163
- package/src/internal/deferred.ts +0 -46
- package/src/internal/differ/chunkPatch.ts +0 -211
- package/src/internal/differ/contextPatch.ts +0 -232
- package/src/internal/differ/hashMapPatch.ts +0 -220
- package/src/internal/differ/hashSetPatch.ts +0 -176
- package/src/internal/differ/orPatch.ts +0 -311
- package/src/internal/differ/readonlyArrayPatch.ts +0 -210
- package/src/internal/differ.ts +0 -200
- package/src/internal/doNotation.ts +0 -80
- package/src/internal/effect/circular.ts +0 -905
- package/src/internal/effectable.ts +0 -131
- package/src/internal/either.ts +0 -110
- package/src/internal/encoding/base64.ts +0 -286
- package/src/internal/encoding/base64Url.ts +0 -29
- package/src/internal/encoding/common.ts +0 -51
- package/src/internal/encoding/hex.ts +0 -315
- package/src/internal/errors.ts +0 -7
- package/src/internal/executionPlan.ts +0 -114
- package/src/internal/executionStrategy.ts +0 -74
- package/src/internal/fiber.ts +0 -388
- package/src/internal/fiberId.ts +0 -267
- package/src/internal/fiberMessage.ts +0 -82
- package/src/internal/fiberRefs/patch.ts +0 -144
- package/src/internal/fiberRefs.ts +0 -297
- package/src/internal/fiberRuntime.ts +0 -3915
- package/src/internal/fiberScope.ts +0 -71
- package/src/internal/fiberStatus.ts +0 -119
- package/src/internal/groupBy.ts +0 -530
- package/src/internal/hashMap/array.ts +0 -49
- package/src/internal/hashMap/bitwise.ts +0 -32
- package/src/internal/hashMap/config.ts +0 -14
- package/src/internal/hashMap/keySet.ts +0 -8
- package/src/internal/hashMap/node.ts +0 -391
- package/src/internal/hashMap.ts +0 -586
- package/src/internal/hashSet.ts +0 -323
- package/src/internal/keyedPool.ts +0 -244
- package/src/internal/layer/circular.ts +0 -228
- package/src/internal/layer.ts +0 -1487
- package/src/internal/logSpan.ts +0 -20
- package/src/internal/logger-circular.ts +0 -24
- package/src/internal/logger.ts +0 -485
- package/src/internal/mailbox.ts +0 -561
- package/src/internal/managedRuntime/circular.ts +0 -6
- package/src/internal/managedRuntime.ts +0 -134
- package/src/internal/matcher.ts +0 -652
- package/src/internal/metric/boundaries.ts +0 -75
- package/src/internal/metric/hook.ts +0 -483
- package/src/internal/metric/key.ts +0 -167
- package/src/internal/metric/keyType.ts +0 -238
- package/src/internal/metric/label.ts +0 -41
- package/src/internal/metric/pair.ts +0 -48
- package/src/internal/metric/polling.ts +0 -149
- package/src/internal/metric/registry.ts +0 -187
- package/src/internal/metric/state.ts +0 -290
- package/src/internal/metric.ts +0 -577
- package/src/internal/opCodes/cause.ts +0 -35
- package/src/internal/opCodes/channel.ts +0 -83
- package/src/internal/opCodes/channelChildExecutorDecision.ts +0 -17
- package/src/internal/opCodes/channelMergeDecision.ts +0 -11
- package/src/internal/opCodes/channelMergeState.ts +0 -17
- package/src/internal/opCodes/channelMergeStrategy.ts +0 -11
- package/src/internal/opCodes/channelState.ts +0 -23
- package/src/internal/opCodes/channelUpstreamPullRequest.ts +0 -11
- package/src/internal/opCodes/channelUpstreamPullStrategy.ts +0 -11
- package/src/internal/opCodes/config.ts +0 -65
- package/src/internal/opCodes/configError.ts +0 -35
- package/src/internal/opCodes/continuation.ts +0 -11
- package/src/internal/opCodes/deferred.ts +0 -11
- package/src/internal/opCodes/effect.ts +0 -89
- package/src/internal/opCodes/layer.ts +0 -59
- package/src/internal/opCodes/streamHaltStrategy.ts +0 -23
- package/src/internal/option.ts +0 -80
- package/src/internal/pool.ts +0 -432
- package/src/internal/pubsub.ts +0 -1762
- package/src/internal/query.ts +0 -204
- package/src/internal/queue.ts +0 -766
- package/src/internal/random.ts +0 -161
- package/src/internal/rateLimiter.ts +0 -93
- package/src/internal/rcMap.ts +0 -285
- package/src/internal/rcRef.ts +0 -192
- package/src/internal/redBlackTree/iterator.ts +0 -200
- package/src/internal/redBlackTree/node.ts +0 -68
- package/src/internal/redBlackTree.ts +0 -1245
- package/src/internal/redacted.ts +0 -73
- package/src/internal/ref.ts +0 -171
- package/src/internal/reloadable.ts +0 -140
- package/src/internal/request.ts +0 -177
- package/src/internal/resource.ts +0 -76
- package/src/internal/ringBuffer.ts +0 -68
- package/src/internal/runtime.ts +0 -558
- package/src/internal/runtimeFlags.ts +0 -188
- package/src/internal/runtimeFlagsPatch.ts +0 -103
- package/src/internal/schedule/decision.ts +0 -47
- package/src/internal/schedule/interval.ts +0 -101
- package/src/internal/schedule/intervals.ts +0 -180
- package/src/internal/schedule.ts +0 -2199
- package/src/internal/schema/errors.ts +0 -191
- package/src/internal/schema/schemaId.ts +0 -106
- package/src/internal/schema/util.ts +0 -50
- package/src/internal/scopedCache.ts +0 -644
- package/src/internal/scopedRef.ts +0 -118
- package/src/internal/secret.ts +0 -89
- package/src/internal/singleShotGen.ts +0 -35
- package/src/internal/sink.ts +0 -2120
- package/src/internal/stack.ts +0 -10
- package/src/internal/stm/core.ts +0 -817
- package/src/internal/stm/entry.ts +0 -59
- package/src/internal/stm/journal.ts +0 -123
- package/src/internal/stm/opCodes/stm.ts +0 -71
- package/src/internal/stm/opCodes/stmState.ts +0 -17
- package/src/internal/stm/opCodes/strategy.ts +0 -17
- package/src/internal/stm/opCodes/tExit.ts +0 -29
- package/src/internal/stm/opCodes/tryCommit.ts +0 -11
- package/src/internal/stm/stm.ts +0 -1453
- package/src/internal/stm/stmState.ts +0 -136
- package/src/internal/stm/tArray.ts +0 -550
- package/src/internal/stm/tDeferred.ts +0 -81
- package/src/internal/stm/tExit.ts +0 -190
- package/src/internal/stm/tMap.ts +0 -824
- package/src/internal/stm/tPriorityQueue.ts +0 -267
- package/src/internal/stm/tPubSub.ts +0 -551
- package/src/internal/stm/tQueue.ts +0 -393
- package/src/internal/stm/tRandom.ts +0 -140
- package/src/internal/stm/tReentrantLock.ts +0 -352
- package/src/internal/stm/tRef.ts +0 -195
- package/src/internal/stm/tSemaphore.ts +0 -113
- package/src/internal/stm/tSet.ts +0 -259
- package/src/internal/stm/tSubscriptionRef.ts +0 -286
- package/src/internal/stm/tryCommit.ts +0 -34
- package/src/internal/stm/txnId.ts +0 -14
- package/src/internal/stm/versioned.ts +0 -4
- package/src/internal/stream/debounceState.ts +0 -57
- package/src/internal/stream/emit.ts +0 -123
- package/src/internal/stream/haltStrategy.ts +0 -94
- package/src/internal/stream/handoff.ts +0 -187
- package/src/internal/stream/handoffSignal.ts +0 -59
- package/src/internal/stream/pull.ts +0 -34
- package/src/internal/stream/sinkEndReason.ts +0 -30
- package/src/internal/stream/zipAllState.ts +0 -88
- package/src/internal/stream/zipChunksState.ts +0 -56
- package/src/internal/stream.ts +0 -8801
- package/src/internal/string-utils.ts +0 -107
- package/src/internal/subscriptionRef.ts +0 -138
- package/src/internal/supervisor/patch.ts +0 -190
- package/src/internal/supervisor.ts +0 -303
- package/src/internal/synchronizedRef.ts +0 -114
- package/src/internal/take.ts +0 -199
- package/src/internal/testing/sleep.ts +0 -27
- package/src/internal/testing/suspendedWarningData.ts +0 -85
- package/src/internal/testing/warningData.ts +0 -94
- package/src/internal/tracer.ts +0 -293
- package/src/internal/trie.ts +0 -722
- package/src/internal/version.ts +0 -7
package/src/internal/stm/core.ts
DELETED
|
@@ -1,817 +0,0 @@
|
|
|
1
|
-
import * as Cause from "../../Cause.js"
|
|
2
|
-
import * as Context from "../../Context.js"
|
|
3
|
-
import * as Effect from "../../Effect.js"
|
|
4
|
-
import * as Either from "../../Either.js"
|
|
5
|
-
import * as Equal from "../../Equal.js"
|
|
6
|
-
import * as Exit from "../../Exit.js"
|
|
7
|
-
import type * as FiberId from "../../FiberId.js"
|
|
8
|
-
import * as FiberRef from "../../FiberRef.js"
|
|
9
|
-
import type { LazyArg } from "../../Function.js"
|
|
10
|
-
import { constVoid, dual, pipe } from "../../Function.js"
|
|
11
|
-
import * as Hash from "../../Hash.js"
|
|
12
|
-
import type * as Option from "../../Option.js"
|
|
13
|
-
import { pipeArguments } from "../../Pipeable.js"
|
|
14
|
-
import { hasProperty } from "../../Predicate.js"
|
|
15
|
-
import type * as Scheduler from "../../Scheduler.js"
|
|
16
|
-
import type * as STM from "../../STM.js"
|
|
17
|
-
import { internalCall, YieldWrap } from "../../Utils.js"
|
|
18
|
-
import { ChannelTypeId } from "../core-stream.js"
|
|
19
|
-
import { withFiberRuntime } from "../core.js"
|
|
20
|
-
import { effectVariance, StreamTypeId } from "../effectable.js"
|
|
21
|
-
import { OP_COMMIT } from "../opCodes/effect.js"
|
|
22
|
-
import { SingleShotGen } from "../singleShotGen.js"
|
|
23
|
-
import { SinkTypeId } from "../sink.js"
|
|
24
|
-
import * as Journal from "./journal.js"
|
|
25
|
-
import * as OpCodes from "./opCodes/stm.js"
|
|
26
|
-
import * as TExitOpCodes from "./opCodes/tExit.js"
|
|
27
|
-
import * as TryCommitOpCodes from "./opCodes/tryCommit.js"
|
|
28
|
-
import * as STMState from "./stmState.js"
|
|
29
|
-
import * as TExit from "./tExit.js"
|
|
30
|
-
import * as TryCommit from "./tryCommit.js"
|
|
31
|
-
import * as TxnId from "./txnId.js"
|
|
32
|
-
|
|
33
|
-
/** @internal */
|
|
34
|
-
const STMSymbolKey = "effect/STM"
|
|
35
|
-
|
|
36
|
-
/** @internal */
|
|
37
|
-
export const STMTypeId: STM.STMTypeId = Symbol.for(
|
|
38
|
-
STMSymbolKey
|
|
39
|
-
) as STM.STMTypeId
|
|
40
|
-
|
|
41
|
-
/** @internal */
|
|
42
|
-
export type Primitive =
|
|
43
|
-
| STMEffect
|
|
44
|
-
| STMOnFailure
|
|
45
|
-
| STMOnRetry
|
|
46
|
-
| STMOnSuccess
|
|
47
|
-
| STMProvide
|
|
48
|
-
| STMSync
|
|
49
|
-
| STMSucceed
|
|
50
|
-
| STMRetry
|
|
51
|
-
| STMFail
|
|
52
|
-
| STMDie
|
|
53
|
-
| STMInterrupt
|
|
54
|
-
|
|
55
|
-
/** @internal */
|
|
56
|
-
type Op<Tag extends string, Body = {}> = STM.STM<never> & Body & {
|
|
57
|
-
readonly _op: OP_COMMIT
|
|
58
|
-
readonly effect_instruction_i0: Tag
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** @internal */
|
|
62
|
-
interface STMEffect extends
|
|
63
|
-
Op<OpCodes.OP_WITH_STM_RUNTIME, {
|
|
64
|
-
readonly effect_instruction_i1: (
|
|
65
|
-
runtime: STMDriver<unknown, unknown, unknown>
|
|
66
|
-
) => STM.STM<unknown, unknown, unknown>
|
|
67
|
-
}>
|
|
68
|
-
{}
|
|
69
|
-
|
|
70
|
-
/** @internal */
|
|
71
|
-
interface STMOnFailure extends
|
|
72
|
-
Op<OpCodes.OP_ON_FAILURE, {
|
|
73
|
-
readonly effect_instruction_i1: STM.STM<unknown, unknown, unknown>
|
|
74
|
-
readonly effect_instruction_i2: (error: unknown) => STM.STM<unknown, unknown, unknown>
|
|
75
|
-
}>
|
|
76
|
-
{}
|
|
77
|
-
|
|
78
|
-
/** @internal */
|
|
79
|
-
interface STMOnRetry extends
|
|
80
|
-
Op<OpCodes.OP_ON_RETRY, {
|
|
81
|
-
readonly effect_instruction_i1: STM.STM<unknown, unknown, unknown>
|
|
82
|
-
readonly effect_instruction_i2: () => STM.STM<unknown, unknown, unknown>
|
|
83
|
-
}>
|
|
84
|
-
{}
|
|
85
|
-
|
|
86
|
-
/** @internal */
|
|
87
|
-
interface STMOnSuccess extends
|
|
88
|
-
Op<OpCodes.OP_ON_SUCCESS, {
|
|
89
|
-
readonly effect_instruction_i1: STM.STM<unknown, unknown, unknown>
|
|
90
|
-
readonly effect_instruction_i2: (a: unknown) => STM.STM<unknown, unknown, unknown>
|
|
91
|
-
}>
|
|
92
|
-
{}
|
|
93
|
-
|
|
94
|
-
/** @internal */
|
|
95
|
-
interface STMProvide extends
|
|
96
|
-
Op<OpCodes.OP_PROVIDE, {
|
|
97
|
-
readonly effect_instruction_i1: STM.STM<unknown, unknown, unknown>
|
|
98
|
-
readonly effect_instruction_i2: (context: Context.Context<unknown>) => Context.Context<unknown>
|
|
99
|
-
}>
|
|
100
|
-
{}
|
|
101
|
-
|
|
102
|
-
/** @internal */
|
|
103
|
-
interface STMSync extends
|
|
104
|
-
Op<OpCodes.OP_SYNC, {
|
|
105
|
-
readonly effect_instruction_i1: () => unknown
|
|
106
|
-
}>
|
|
107
|
-
{}
|
|
108
|
-
|
|
109
|
-
/** @internal */
|
|
110
|
-
interface STMSucceed extends
|
|
111
|
-
Op<OpCodes.OP_SUCCEED, {
|
|
112
|
-
readonly effect_instruction_i1: unknown
|
|
113
|
-
}>
|
|
114
|
-
{}
|
|
115
|
-
|
|
116
|
-
/** @internal */
|
|
117
|
-
interface STMRetry extends Op<OpCodes.OP_RETRY, {}> {}
|
|
118
|
-
|
|
119
|
-
/** @internal */
|
|
120
|
-
interface STMFail extends
|
|
121
|
-
Op<OpCodes.OP_FAIL, {
|
|
122
|
-
readonly effect_instruction_i1: LazyArg<unknown>
|
|
123
|
-
}>
|
|
124
|
-
{}
|
|
125
|
-
|
|
126
|
-
/** @internal */
|
|
127
|
-
interface STMDie extends
|
|
128
|
-
Op<OpCodes.OP_DIE, {
|
|
129
|
-
readonly effect_instruction_i1: LazyArg<unknown>
|
|
130
|
-
}>
|
|
131
|
-
{}
|
|
132
|
-
|
|
133
|
-
/** @internal */
|
|
134
|
-
interface STMInterrupt extends
|
|
135
|
-
Op<OpCodes.OP_INTERRUPT, {
|
|
136
|
-
readonly effect_instruction_i1: FiberId.Runtime
|
|
137
|
-
}>
|
|
138
|
-
{}
|
|
139
|
-
|
|
140
|
-
const stmVariance = {
|
|
141
|
-
/* c8 ignore next */
|
|
142
|
-
_R: (_: never) => _,
|
|
143
|
-
/* c8 ignore next */
|
|
144
|
-
_E: (_: never) => _,
|
|
145
|
-
/* c8 ignore next */
|
|
146
|
-
_A: (_: never) => _
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/** @internal */
|
|
150
|
-
class STMPrimitive implements STM.STM<any, any, any> {
|
|
151
|
-
public _op = OP_COMMIT
|
|
152
|
-
public effect_instruction_i1: any = undefined
|
|
153
|
-
public effect_instruction_i2: any = undefined;
|
|
154
|
-
[Effect.EffectTypeId]: any;
|
|
155
|
-
[StreamTypeId]: any;
|
|
156
|
-
[SinkTypeId]: any;
|
|
157
|
-
[ChannelTypeId]: any
|
|
158
|
-
get [STMTypeId]() {
|
|
159
|
-
return stmVariance
|
|
160
|
-
}
|
|
161
|
-
constructor(readonly effect_instruction_i0: Primitive["effect_instruction_i0"]) {
|
|
162
|
-
this[Effect.EffectTypeId] = effectVariance
|
|
163
|
-
this[StreamTypeId] = stmVariance
|
|
164
|
-
this[SinkTypeId] = stmVariance
|
|
165
|
-
this[ChannelTypeId] = stmVariance
|
|
166
|
-
}
|
|
167
|
-
[Equal.symbol](this: {}, that: unknown) {
|
|
168
|
-
return this === that
|
|
169
|
-
}
|
|
170
|
-
[Hash.symbol](this: {}) {
|
|
171
|
-
return Hash.cached(this, Hash.random(this))
|
|
172
|
-
}
|
|
173
|
-
[Symbol.iterator]() {
|
|
174
|
-
return new SingleShotGen(new YieldWrap(this)) as any
|
|
175
|
-
}
|
|
176
|
-
commit(this: STM.STM<any, any, any>): Effect.Effect<any, any, any> {
|
|
177
|
-
return unsafeAtomically(this, constVoid, constVoid)
|
|
178
|
-
}
|
|
179
|
-
pipe() {
|
|
180
|
-
return pipeArguments(this, arguments)
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/** @internal */
|
|
185
|
-
export const isSTM = (u: unknown): u is STM.STM<unknown, unknown, unknown> => hasProperty(u, STMTypeId)
|
|
186
|
-
|
|
187
|
-
/** @internal */
|
|
188
|
-
export const commit = <A, E, R>(self: STM.STM<A, E, R>): Effect.Effect<A, E, R> =>
|
|
189
|
-
unsafeAtomically(self, constVoid, constVoid)
|
|
190
|
-
|
|
191
|
-
/** @internal */
|
|
192
|
-
export const unsafeAtomically = <A, E, R>(
|
|
193
|
-
self: STM.STM<A, E, R>,
|
|
194
|
-
onDone: (exit: Exit.Exit<A, E>) => unknown,
|
|
195
|
-
onInterrupt: LazyArg<unknown>
|
|
196
|
-
): Effect.Effect<A, E, R> =>
|
|
197
|
-
withFiberRuntime((state) => {
|
|
198
|
-
const fiberId = state.id()
|
|
199
|
-
const env = state.getFiberRef(FiberRef.currentContext) as Context.Context<R>
|
|
200
|
-
const scheduler = state.getFiberRef(FiberRef.currentScheduler)
|
|
201
|
-
const priority = state.getFiberRef(FiberRef.currentSchedulingPriority)
|
|
202
|
-
const commitResult = tryCommitSync(fiberId, self, env, scheduler, priority)
|
|
203
|
-
switch (commitResult._tag) {
|
|
204
|
-
case TryCommitOpCodes.OP_DONE: {
|
|
205
|
-
onDone(commitResult.exit)
|
|
206
|
-
return commitResult.exit
|
|
207
|
-
}
|
|
208
|
-
case TryCommitOpCodes.OP_SUSPEND: {
|
|
209
|
-
const txnId = TxnId.make()
|
|
210
|
-
const state: { value: STMState.STMState<A, E> } = { value: STMState.running }
|
|
211
|
-
const effect = Effect.async(
|
|
212
|
-
(k: (effect: Effect.Effect<A, E, R>) => unknown): void =>
|
|
213
|
-
tryCommitAsync(fiberId, self, txnId, state, env, scheduler, priority, k)
|
|
214
|
-
)
|
|
215
|
-
return Effect.uninterruptibleMask((restore) =>
|
|
216
|
-
pipe(
|
|
217
|
-
restore(effect),
|
|
218
|
-
Effect.catchAllCause((cause) => {
|
|
219
|
-
let currentState = state.value
|
|
220
|
-
if (STMState.isRunning(currentState)) {
|
|
221
|
-
state.value = STMState.interrupted
|
|
222
|
-
}
|
|
223
|
-
currentState = state.value
|
|
224
|
-
if (STMState.isDone(currentState)) {
|
|
225
|
-
onDone(currentState.exit)
|
|
226
|
-
return currentState.exit
|
|
227
|
-
}
|
|
228
|
-
onInterrupt()
|
|
229
|
-
return Effect.failCause(cause)
|
|
230
|
-
})
|
|
231
|
-
)
|
|
232
|
-
)
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
})
|
|
236
|
-
|
|
237
|
-
/** @internal */
|
|
238
|
-
const tryCommit = <A, E, R>(
|
|
239
|
-
fiberId: FiberId.FiberId,
|
|
240
|
-
stm: STM.STM<A, E, R>,
|
|
241
|
-
state: { value: STMState.STMState<A, E> },
|
|
242
|
-
env: Context.Context<R>,
|
|
243
|
-
scheduler: Scheduler.Scheduler,
|
|
244
|
-
priority: number
|
|
245
|
-
): TryCommit.TryCommit<A, E> => {
|
|
246
|
-
const journal: Journal.Journal = new Map()
|
|
247
|
-
const tExit = new STMDriver(stm, journal, fiberId, env).run()
|
|
248
|
-
const analysis = Journal.analyzeJournal(journal)
|
|
249
|
-
|
|
250
|
-
if (analysis === Journal.JournalAnalysisReadWrite) {
|
|
251
|
-
Journal.commitJournal(journal)
|
|
252
|
-
} else if (analysis === Journal.JournalAnalysisInvalid) {
|
|
253
|
-
throw new Error(
|
|
254
|
-
"BUG: STM.TryCommit.tryCommit - please report an issue at https://github.com/Effect-TS/effect/issues"
|
|
255
|
-
)
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
switch (tExit._tag) {
|
|
259
|
-
case TExitOpCodes.OP_SUCCEED: {
|
|
260
|
-
state.value = STMState.fromTExit(tExit)
|
|
261
|
-
return completeTodos(Exit.succeed(tExit.value), journal, scheduler, priority)
|
|
262
|
-
}
|
|
263
|
-
case TExitOpCodes.OP_FAIL: {
|
|
264
|
-
state.value = STMState.fromTExit(tExit)
|
|
265
|
-
const cause = Cause.fail(tExit.error)
|
|
266
|
-
return completeTodos(
|
|
267
|
-
Exit.failCause(cause),
|
|
268
|
-
journal,
|
|
269
|
-
scheduler,
|
|
270
|
-
priority
|
|
271
|
-
)
|
|
272
|
-
}
|
|
273
|
-
case TExitOpCodes.OP_DIE: {
|
|
274
|
-
state.value = STMState.fromTExit(tExit)
|
|
275
|
-
const cause = Cause.die(tExit.defect)
|
|
276
|
-
return completeTodos(
|
|
277
|
-
Exit.failCause(cause),
|
|
278
|
-
journal,
|
|
279
|
-
scheduler,
|
|
280
|
-
priority
|
|
281
|
-
)
|
|
282
|
-
}
|
|
283
|
-
case TExitOpCodes.OP_INTERRUPT: {
|
|
284
|
-
state.value = STMState.fromTExit(tExit)
|
|
285
|
-
const cause = Cause.interrupt(fiberId)
|
|
286
|
-
return completeTodos(
|
|
287
|
-
Exit.failCause(cause),
|
|
288
|
-
journal,
|
|
289
|
-
scheduler,
|
|
290
|
-
priority
|
|
291
|
-
)
|
|
292
|
-
}
|
|
293
|
-
case TExitOpCodes.OP_RETRY: {
|
|
294
|
-
return TryCommit.suspend(journal)
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/** @internal */
|
|
300
|
-
const tryCommitSync = <A, E, R>(
|
|
301
|
-
fiberId: FiberId.FiberId,
|
|
302
|
-
stm: STM.STM<A, E, R>,
|
|
303
|
-
env: Context.Context<R>,
|
|
304
|
-
scheduler: Scheduler.Scheduler,
|
|
305
|
-
priority: number
|
|
306
|
-
): TryCommit.TryCommit<A, E> => {
|
|
307
|
-
const journal: Journal.Journal = new Map()
|
|
308
|
-
const tExit = new STMDriver(stm, journal, fiberId, env).run()
|
|
309
|
-
const analysis = Journal.analyzeJournal(journal)
|
|
310
|
-
|
|
311
|
-
if (analysis === Journal.JournalAnalysisReadWrite && TExit.isSuccess(tExit)) {
|
|
312
|
-
Journal.commitJournal(journal)
|
|
313
|
-
} else if (analysis === Journal.JournalAnalysisInvalid) {
|
|
314
|
-
throw new Error(
|
|
315
|
-
"BUG: STM.TryCommit.tryCommitSync - please report an issue at https://github.com/Effect-TS/effect/issues"
|
|
316
|
-
)
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
switch (tExit._tag) {
|
|
320
|
-
case TExitOpCodes.OP_SUCCEED: {
|
|
321
|
-
return completeTodos(Exit.succeed(tExit.value), journal, scheduler, priority)
|
|
322
|
-
}
|
|
323
|
-
case TExitOpCodes.OP_FAIL: {
|
|
324
|
-
const cause = Cause.fail(tExit.error)
|
|
325
|
-
return completeTodos(
|
|
326
|
-
Exit.failCause(cause),
|
|
327
|
-
journal,
|
|
328
|
-
scheduler,
|
|
329
|
-
priority
|
|
330
|
-
)
|
|
331
|
-
}
|
|
332
|
-
case TExitOpCodes.OP_DIE: {
|
|
333
|
-
const cause = Cause.die(tExit.defect)
|
|
334
|
-
return completeTodos(
|
|
335
|
-
Exit.failCause(cause),
|
|
336
|
-
journal,
|
|
337
|
-
scheduler,
|
|
338
|
-
priority
|
|
339
|
-
)
|
|
340
|
-
}
|
|
341
|
-
case TExitOpCodes.OP_INTERRUPT: {
|
|
342
|
-
const cause = Cause.interrupt(fiberId)
|
|
343
|
-
return completeTodos(
|
|
344
|
-
Exit.failCause(cause),
|
|
345
|
-
journal,
|
|
346
|
-
scheduler,
|
|
347
|
-
priority
|
|
348
|
-
)
|
|
349
|
-
}
|
|
350
|
-
case TExitOpCodes.OP_RETRY: {
|
|
351
|
-
return TryCommit.suspend(journal)
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
/** @internal */
|
|
357
|
-
const tryCommitAsync = <A, E, R>(
|
|
358
|
-
fiberId: FiberId.FiberId,
|
|
359
|
-
self: STM.STM<A, E, R>,
|
|
360
|
-
txnId: TxnId.TxnId,
|
|
361
|
-
state: { value: STMState.STMState<A, E> },
|
|
362
|
-
context: Context.Context<R>,
|
|
363
|
-
scheduler: Scheduler.Scheduler,
|
|
364
|
-
priority: number,
|
|
365
|
-
k: (effect: Effect.Effect<A, E, R>) => unknown
|
|
366
|
-
) => {
|
|
367
|
-
if (STMState.isRunning(state.value)) {
|
|
368
|
-
const result = tryCommit(fiberId, self, state, context, scheduler, priority)
|
|
369
|
-
switch (result._tag) {
|
|
370
|
-
case TryCommitOpCodes.OP_DONE: {
|
|
371
|
-
completeTryCommit(result.exit, k)
|
|
372
|
-
break
|
|
373
|
-
}
|
|
374
|
-
case TryCommitOpCodes.OP_SUSPEND: {
|
|
375
|
-
Journal.addTodo(
|
|
376
|
-
txnId,
|
|
377
|
-
result.journal,
|
|
378
|
-
() => tryCommitAsync(fiberId, self, txnId, state, context, scheduler, priority, k)
|
|
379
|
-
)
|
|
380
|
-
break
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
/** @internal */
|
|
387
|
-
const completeTodos = <A, E>(
|
|
388
|
-
exit: Exit.Exit<A, E>,
|
|
389
|
-
journal: Journal.Journal,
|
|
390
|
-
scheduler: Scheduler.Scheduler,
|
|
391
|
-
priority: number
|
|
392
|
-
): TryCommit.TryCommit<A, E> => {
|
|
393
|
-
const todos = Journal.collectTodos(journal)
|
|
394
|
-
if (todos.size > 0) {
|
|
395
|
-
scheduler.scheduleTask(() => Journal.execTodos(todos), priority)
|
|
396
|
-
}
|
|
397
|
-
return TryCommit.done(exit)
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
/** @internal */
|
|
401
|
-
const completeTryCommit = <A, E, R>(
|
|
402
|
-
exit: Exit.Exit<A, E>,
|
|
403
|
-
k: (effect: Effect.Effect<A, E, R>) => unknown
|
|
404
|
-
): void => {
|
|
405
|
-
k(exit)
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
/** @internal */
|
|
409
|
-
type Continuation = STMOnFailure | STMOnSuccess | STMOnRetry
|
|
410
|
-
|
|
411
|
-
/** @internal */
|
|
412
|
-
export const context = <R>(): STM.STM<Context.Context<R>, never, R> =>
|
|
413
|
-
effect<R, Context.Context<R>>((_, __, env) => env)
|
|
414
|
-
|
|
415
|
-
/** @internal */
|
|
416
|
-
export const contextWith = <R0, R>(f: (environment: Context.Context<R0>) => R): STM.STM<R, never, R0> =>
|
|
417
|
-
map(context<R0>(), f)
|
|
418
|
-
|
|
419
|
-
/** @internal */
|
|
420
|
-
export const contextWithSTM = <R0, A, E, R>(
|
|
421
|
-
f: (environment: Context.Context<R0>) => STM.STM<A, E, R>
|
|
422
|
-
): STM.STM<A, E, R0 | R> => flatMap(context<R0>(), f)
|
|
423
|
-
|
|
424
|
-
/** @internal */
|
|
425
|
-
export class STMDriver<in out R, out E, out A> {
|
|
426
|
-
private contStack: Array<Continuation> = []
|
|
427
|
-
private env: Context.Context<unknown>
|
|
428
|
-
|
|
429
|
-
constructor(
|
|
430
|
-
readonly self: STM.STM<A, E, R>,
|
|
431
|
-
readonly journal: Journal.Journal,
|
|
432
|
-
readonly fiberId: FiberId.FiberId,
|
|
433
|
-
r0: Context.Context<R>
|
|
434
|
-
) {
|
|
435
|
-
this.env = r0 as Context.Context<unknown>
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
getEnv(): Context.Context<R> {
|
|
439
|
-
return this.env
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
pushStack(cont: Continuation) {
|
|
443
|
-
this.contStack.push(cont)
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
popStack() {
|
|
447
|
-
return this.contStack.pop()
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
nextSuccess() {
|
|
451
|
-
let current = this.popStack()
|
|
452
|
-
while (current !== undefined && current.effect_instruction_i0 !== OpCodes.OP_ON_SUCCESS) {
|
|
453
|
-
current = this.popStack()
|
|
454
|
-
}
|
|
455
|
-
return current
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
nextFailure() {
|
|
459
|
-
let current = this.popStack()
|
|
460
|
-
while (current !== undefined && current.effect_instruction_i0 !== OpCodes.OP_ON_FAILURE) {
|
|
461
|
-
current = this.popStack()
|
|
462
|
-
}
|
|
463
|
-
return current
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
nextRetry() {
|
|
467
|
-
let current = this.popStack()
|
|
468
|
-
while (current !== undefined && current.effect_instruction_i0 !== OpCodes.OP_ON_RETRY) {
|
|
469
|
-
current = this.popStack()
|
|
470
|
-
}
|
|
471
|
-
return current
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
run(): TExit.TExit<A, E> {
|
|
475
|
-
let curr = this.self as Primitive | Context.Tag<any, any> | Either.Either<any, any> | Option.Option<any> | undefined
|
|
476
|
-
let exit: TExit.TExit<unknown, unknown> | undefined = undefined
|
|
477
|
-
while (exit === undefined && curr !== undefined) {
|
|
478
|
-
try {
|
|
479
|
-
const current = curr
|
|
480
|
-
if (current) {
|
|
481
|
-
switch (current._op) {
|
|
482
|
-
case "Tag": {
|
|
483
|
-
curr = effect((_, __, env) => Context.unsafeGet(env, current)) as Primitive
|
|
484
|
-
break
|
|
485
|
-
}
|
|
486
|
-
case "Left": {
|
|
487
|
-
curr = fail(current.left) as Primitive
|
|
488
|
-
break
|
|
489
|
-
}
|
|
490
|
-
case "None": {
|
|
491
|
-
curr = fail(new Cause.NoSuchElementException()) as Primitive
|
|
492
|
-
break
|
|
493
|
-
}
|
|
494
|
-
case "Right": {
|
|
495
|
-
curr = succeed(current.right) as Primitive
|
|
496
|
-
break
|
|
497
|
-
}
|
|
498
|
-
case "Some": {
|
|
499
|
-
curr = succeed(current.value) as Primitive
|
|
500
|
-
break
|
|
501
|
-
}
|
|
502
|
-
case "Commit": {
|
|
503
|
-
switch (current.effect_instruction_i0) {
|
|
504
|
-
case OpCodes.OP_DIE: {
|
|
505
|
-
exit = TExit.die(internalCall(() => current.effect_instruction_i1()))
|
|
506
|
-
break
|
|
507
|
-
}
|
|
508
|
-
case OpCodes.OP_FAIL: {
|
|
509
|
-
const cont = this.nextFailure()
|
|
510
|
-
if (cont === undefined) {
|
|
511
|
-
exit = TExit.fail(internalCall(() => current.effect_instruction_i1()))
|
|
512
|
-
} else {
|
|
513
|
-
curr = internalCall(() =>
|
|
514
|
-
cont.effect_instruction_i2(
|
|
515
|
-
internalCall(() => current.effect_instruction_i1())
|
|
516
|
-
) as Primitive
|
|
517
|
-
)
|
|
518
|
-
}
|
|
519
|
-
break
|
|
520
|
-
}
|
|
521
|
-
case OpCodes.OP_RETRY: {
|
|
522
|
-
const cont = this.nextRetry()
|
|
523
|
-
if (cont === undefined) {
|
|
524
|
-
exit = TExit.retry
|
|
525
|
-
} else {
|
|
526
|
-
curr = internalCall(() => cont.effect_instruction_i2() as Primitive)
|
|
527
|
-
}
|
|
528
|
-
break
|
|
529
|
-
}
|
|
530
|
-
case OpCodes.OP_INTERRUPT: {
|
|
531
|
-
exit = TExit.interrupt(this.fiberId)
|
|
532
|
-
break
|
|
533
|
-
}
|
|
534
|
-
case OpCodes.OP_WITH_STM_RUNTIME: {
|
|
535
|
-
curr = internalCall(() =>
|
|
536
|
-
current.effect_instruction_i1(this as STMDriver<unknown, unknown, unknown>) as Primitive
|
|
537
|
-
)
|
|
538
|
-
break
|
|
539
|
-
}
|
|
540
|
-
case OpCodes.OP_ON_SUCCESS:
|
|
541
|
-
case OpCodes.OP_ON_FAILURE:
|
|
542
|
-
case OpCodes.OP_ON_RETRY: {
|
|
543
|
-
this.pushStack(current)
|
|
544
|
-
curr = current.effect_instruction_i1 as Primitive
|
|
545
|
-
break
|
|
546
|
-
}
|
|
547
|
-
case OpCodes.OP_PROVIDE: {
|
|
548
|
-
const env = this.env
|
|
549
|
-
this.env = internalCall(() => current.effect_instruction_i2(env))
|
|
550
|
-
curr = pipe(
|
|
551
|
-
current.effect_instruction_i1,
|
|
552
|
-
ensuring(sync(() => (this.env = env)))
|
|
553
|
-
) as Primitive
|
|
554
|
-
break
|
|
555
|
-
}
|
|
556
|
-
case OpCodes.OP_SUCCEED: {
|
|
557
|
-
const value = current.effect_instruction_i1
|
|
558
|
-
const cont = this.nextSuccess()
|
|
559
|
-
if (cont === undefined) {
|
|
560
|
-
exit = TExit.succeed(value)
|
|
561
|
-
} else {
|
|
562
|
-
curr = internalCall(() => cont.effect_instruction_i2(value) as Primitive)
|
|
563
|
-
}
|
|
564
|
-
break
|
|
565
|
-
}
|
|
566
|
-
case OpCodes.OP_SYNC: {
|
|
567
|
-
const value = internalCall(() => current.effect_instruction_i1())
|
|
568
|
-
const cont = this.nextSuccess()
|
|
569
|
-
if (cont === undefined) {
|
|
570
|
-
exit = TExit.succeed(value)
|
|
571
|
-
} else {
|
|
572
|
-
curr = internalCall(() => cont.effect_instruction_i2(value) as Primitive)
|
|
573
|
-
}
|
|
574
|
-
break
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
break
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
} catch (e) {
|
|
582
|
-
curr = die(e) as Primitive
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
return exit as TExit.TExit<A, E>
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
/** @internal */
|
|
590
|
-
export const catchAll = dual<
|
|
591
|
-
<E, B, E1, R1>(
|
|
592
|
-
f: (e: E) => STM.STM<B, E1, R1>
|
|
593
|
-
) => <A, R>(
|
|
594
|
-
self: STM.STM<A, E, R>
|
|
595
|
-
) => STM.STM<B | A, E1, R1 | R>,
|
|
596
|
-
<A, E, R, B, E1, R1>(
|
|
597
|
-
self: STM.STM<A, E, R>,
|
|
598
|
-
f: (e: E) => STM.STM<B, E1, R1>
|
|
599
|
-
) => STM.STM<B | A, E1, R1 | R>
|
|
600
|
-
>(2, (self, f) => {
|
|
601
|
-
const stm = new STMPrimitive(OpCodes.OP_ON_FAILURE)
|
|
602
|
-
stm.effect_instruction_i1 = self
|
|
603
|
-
stm.effect_instruction_i2 = f
|
|
604
|
-
return stm
|
|
605
|
-
})
|
|
606
|
-
|
|
607
|
-
/** @internal */
|
|
608
|
-
export const mapInputContext = dual<
|
|
609
|
-
<R0, R>(
|
|
610
|
-
f: (context: Context.Context<R0>) => Context.Context<R>
|
|
611
|
-
) => <A, E>(
|
|
612
|
-
self: STM.STM<A, E, R>
|
|
613
|
-
) => STM.STM<A, E, R0>,
|
|
614
|
-
<A, E, R0, R>(
|
|
615
|
-
self: STM.STM<A, E, R>,
|
|
616
|
-
f: (context: Context.Context<R0>) => Context.Context<R>
|
|
617
|
-
) => STM.STM<A, E, R0>
|
|
618
|
-
>(2, (self, f) => {
|
|
619
|
-
const stm = new STMPrimitive(OpCodes.OP_PROVIDE)
|
|
620
|
-
stm.effect_instruction_i1 = self
|
|
621
|
-
stm.effect_instruction_i2 = f
|
|
622
|
-
return stm
|
|
623
|
-
})
|
|
624
|
-
|
|
625
|
-
/** @internal */
|
|
626
|
-
export const die = (defect: unknown): STM.STM<never> => dieSync(() => defect)
|
|
627
|
-
|
|
628
|
-
/** @internal */
|
|
629
|
-
export const dieMessage = (message: string): STM.STM<never> => dieSync(() => new Cause.RuntimeException(message))
|
|
630
|
-
|
|
631
|
-
/** @internal */
|
|
632
|
-
export const dieSync = (evaluate: LazyArg<unknown>): STM.STM<never> => {
|
|
633
|
-
const stm = new STMPrimitive(OpCodes.OP_DIE)
|
|
634
|
-
stm.effect_instruction_i1 = evaluate
|
|
635
|
-
return stm as any
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
/** @internal */
|
|
639
|
-
export const effect = <R, A>(
|
|
640
|
-
f: (journal: Journal.Journal, fiberId: FiberId.FiberId, environment: Context.Context<R>) => A
|
|
641
|
-
): STM.STM<A, never, R> => withSTMRuntime((_) => succeed(f(_.journal, _.fiberId, _.getEnv())))
|
|
642
|
-
|
|
643
|
-
/** @internal */
|
|
644
|
-
export const ensuring = dual<
|
|
645
|
-
<R1, B>(finalizer: STM.STM<B, never, R1>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A, E, R1 | R>,
|
|
646
|
-
<A, E, R, R1, B>(self: STM.STM<A, E, R>, finalizer: STM.STM<B, never, R1>) => STM.STM<A, E, R1 | R>
|
|
647
|
-
>(2, (self, finalizer) =>
|
|
648
|
-
matchSTM(self, {
|
|
649
|
-
onFailure: (e) => zipRight(finalizer, fail(e)),
|
|
650
|
-
onSuccess: (a) => zipRight(finalizer, succeed(a))
|
|
651
|
-
}))
|
|
652
|
-
|
|
653
|
-
/** @internal */
|
|
654
|
-
export const fail = <E>(error: E): STM.STM<never, E> => failSync(() => error)
|
|
655
|
-
|
|
656
|
-
/** @internal */
|
|
657
|
-
export const failSync = <E>(evaluate: LazyArg<E>): STM.STM<never, E> => {
|
|
658
|
-
const stm = new STMPrimitive(OpCodes.OP_FAIL)
|
|
659
|
-
stm.effect_instruction_i1 = evaluate
|
|
660
|
-
return stm as any
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
/** @internal */
|
|
664
|
-
export const flatMap = dual<
|
|
665
|
-
<A, A2, E1, R1>(f: (a: A) => STM.STM<A2, E1, R1>) => <E, R>(self: STM.STM<A, E, R>) => STM.STM<A2, E1 | E, R1 | R>,
|
|
666
|
-
<A, E, R, A2, E1, R1>(self: STM.STM<A, E, R>, f: (a: A) => STM.STM<A2, E1, R1>) => STM.STM<A2, E1 | E, R1 | R>
|
|
667
|
-
>(2, (self, f) => {
|
|
668
|
-
const stm = new STMPrimitive(OpCodes.OP_ON_SUCCESS)
|
|
669
|
-
stm.effect_instruction_i1 = self
|
|
670
|
-
stm.effect_instruction_i2 = f
|
|
671
|
-
return stm
|
|
672
|
-
})
|
|
673
|
-
|
|
674
|
-
/** @internal */
|
|
675
|
-
export const matchSTM = dual<
|
|
676
|
-
<E, A1, E1, R1, A, A2, E2, R2>(
|
|
677
|
-
options: {
|
|
678
|
-
readonly onFailure: (e: E) => STM.STM<A1, E1, R1>
|
|
679
|
-
readonly onSuccess: (a: A) => STM.STM<A2, E2, R2>
|
|
680
|
-
}
|
|
681
|
-
) => <R>(self: STM.STM<A, E, R>) => STM.STM<A1 | A2, E1 | E2, R1 | R2 | R>,
|
|
682
|
-
<A, E, R, A1, E1, R1, A2, E2, R2>(
|
|
683
|
-
self: STM.STM<A, E, R>,
|
|
684
|
-
options: {
|
|
685
|
-
readonly onFailure: (e: E) => STM.STM<A1, E1, R1>
|
|
686
|
-
readonly onSuccess: (a: A) => STM.STM<A2, E2, R2>
|
|
687
|
-
}
|
|
688
|
-
) => STM.STM<A1 | A2, E1 | E2, R1 | R2 | R>
|
|
689
|
-
>(2, <A, E, R, A1, E1, R1, A2, E2, R2>(
|
|
690
|
-
self: STM.STM<A, E, R>,
|
|
691
|
-
{ onFailure, onSuccess }: {
|
|
692
|
-
readonly onFailure: (e: E) => STM.STM<A1, E1, R1>
|
|
693
|
-
readonly onSuccess: (a: A) => STM.STM<A2, E2, R2>
|
|
694
|
-
}
|
|
695
|
-
): STM.STM<A1 | A2, E1 | E2, R1 | R2 | R> =>
|
|
696
|
-
pipe(
|
|
697
|
-
self,
|
|
698
|
-
map(Either.right),
|
|
699
|
-
catchAll((e) => pipe(onFailure(e), map(Either.left))),
|
|
700
|
-
flatMap((either): STM.STM<A1 | A2, E1 | E2, R | R1 | R2> => {
|
|
701
|
-
switch (either._tag) {
|
|
702
|
-
case "Left": {
|
|
703
|
-
return succeed(either.left)
|
|
704
|
-
}
|
|
705
|
-
case "Right": {
|
|
706
|
-
return onSuccess(either.right)
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
})
|
|
710
|
-
))
|
|
711
|
-
|
|
712
|
-
/** @internal */
|
|
713
|
-
export const withSTMRuntime = <A, E = never, R = never>(
|
|
714
|
-
f: (runtime: STMDriver<unknown, unknown, unknown>) => STM.STM<A, E, R>
|
|
715
|
-
): STM.STM<A, E, R> => {
|
|
716
|
-
const stm = new STMPrimitive(OpCodes.OP_WITH_STM_RUNTIME)
|
|
717
|
-
stm.effect_instruction_i1 = f
|
|
718
|
-
return stm
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
/** @internal */
|
|
722
|
-
export const interrupt: STM.STM<never> = withSTMRuntime((_) => {
|
|
723
|
-
const stm = new STMPrimitive(OpCodes.OP_INTERRUPT)
|
|
724
|
-
stm.effect_instruction_i1 = _.fiberId
|
|
725
|
-
return stm as any
|
|
726
|
-
})
|
|
727
|
-
|
|
728
|
-
/** @internal */
|
|
729
|
-
export const interruptAs = (fiberId: FiberId.FiberId): STM.STM<never> => {
|
|
730
|
-
const stm = new STMPrimitive(OpCodes.OP_INTERRUPT)
|
|
731
|
-
stm.effect_instruction_i1 = fiberId
|
|
732
|
-
return stm as any
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
/** @internal */
|
|
736
|
-
export const map = dual<
|
|
737
|
-
<A, B>(f: (a: A) => B) => <E, R>(self: STM.STM<A, E, R>) => STM.STM<B, E, R>,
|
|
738
|
-
<A, E, R, B>(self: STM.STM<A, E, R>, f: (a: A) => B) => STM.STM<B, E, R>
|
|
739
|
-
>(2, (self, f) => pipe(self, flatMap((a) => sync(() => f(a)))))
|
|
740
|
-
|
|
741
|
-
/** @internal */
|
|
742
|
-
export const orTry = dual<
|
|
743
|
-
<A1, E1, R1>(
|
|
744
|
-
that: LazyArg<STM.STM<A1, E1, R1>>
|
|
745
|
-
) => <A, E, R>(
|
|
746
|
-
self: STM.STM<A, E, R>
|
|
747
|
-
) => STM.STM<A1 | A, E1 | E, R1 | R>,
|
|
748
|
-
<A, E, R, A1, E1, R1>(
|
|
749
|
-
self: STM.STM<A, E, R>,
|
|
750
|
-
that: LazyArg<STM.STM<A1, E1, R1>>
|
|
751
|
-
) => STM.STM<A1 | A, E1 | E, R1 | R>
|
|
752
|
-
>(2, (self, that) => {
|
|
753
|
-
const stm = new STMPrimitive(OpCodes.OP_ON_RETRY)
|
|
754
|
-
stm.effect_instruction_i1 = self
|
|
755
|
-
stm.effect_instruction_i2 = that
|
|
756
|
-
return stm
|
|
757
|
-
})
|
|
758
|
-
|
|
759
|
-
/** @internal */
|
|
760
|
-
export const retry: STM.STM<never> = new STMPrimitive(OpCodes.OP_RETRY)
|
|
761
|
-
|
|
762
|
-
/** @internal */
|
|
763
|
-
export const succeed = <A>(value: A): STM.STM<A> => {
|
|
764
|
-
const stm = new STMPrimitive(OpCodes.OP_SUCCEED)
|
|
765
|
-
stm.effect_instruction_i1 = value
|
|
766
|
-
return stm as any
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
/** @internal */
|
|
770
|
-
export const sync = <A>(evaluate: () => A): STM.STM<A> => {
|
|
771
|
-
const stm = new STMPrimitive(OpCodes.OP_SYNC)
|
|
772
|
-
stm.effect_instruction_i1 = evaluate
|
|
773
|
-
return stm as any
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
/** @internal */
|
|
777
|
-
export const zip = dual<
|
|
778
|
-
<A1, E1, R1>(
|
|
779
|
-
that: STM.STM<A1, E1, R1>
|
|
780
|
-
) => <A, E, R>(
|
|
781
|
-
self: STM.STM<A, E, R>
|
|
782
|
-
) => STM.STM<[A, A1], E1 | E, R1 | R>,
|
|
783
|
-
<A, E, R, A1, E1, R1>(
|
|
784
|
-
self: STM.STM<A, E, R>,
|
|
785
|
-
that: STM.STM<A1, E1, R1>
|
|
786
|
-
) => STM.STM<[A, A1], E1 | E, R1 | R>
|
|
787
|
-
>(2, (self, that) => pipe(self, zipWith(that, (a, a1) => [a, a1])))
|
|
788
|
-
|
|
789
|
-
/** @internal */
|
|
790
|
-
export const zipLeft = dual<
|
|
791
|
-
<A1, E1, R1>(that: STM.STM<A1, E1, R1>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A, E1 | E, R1 | R>,
|
|
792
|
-
<A, E, R, A1, E1, R1>(self: STM.STM<A, E, R>, that: STM.STM<A1, E1, R1>) => STM.STM<A, E1 | E, R1 | R>
|
|
793
|
-
>(2, (self, that) => pipe(self, flatMap((a) => pipe(that, map(() => a)))))
|
|
794
|
-
|
|
795
|
-
/** @internal */
|
|
796
|
-
export const zipRight = dual<
|
|
797
|
-
<A1, E1, R1>(that: STM.STM<A1, E1, R1>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A1, E1 | E, R1 | R>,
|
|
798
|
-
<A, E, R, A1, E1, R1>(self: STM.STM<A, E, R>, that: STM.STM<A1, E1, R1>) => STM.STM<A1, E1 | E, R1 | R>
|
|
799
|
-
>(2, (self, that) => pipe(self, flatMap(() => that)))
|
|
800
|
-
|
|
801
|
-
/** @internal */
|
|
802
|
-
export const zipWith = dual<
|
|
803
|
-
<A1, E1, R1, A, A2>(
|
|
804
|
-
that: STM.STM<A1, E1, R1>,
|
|
805
|
-
f: (a: A, b: A1) => A2
|
|
806
|
-
) => <E, R>(
|
|
807
|
-
self: STM.STM<A, E, R>
|
|
808
|
-
) => STM.STM<A2, E1 | E, R1 | R>,
|
|
809
|
-
<A, E, R, A1, E1, R1, A2>(
|
|
810
|
-
self: STM.STM<A, E, R>,
|
|
811
|
-
that: STM.STM<A1, E1, R1>,
|
|
812
|
-
f: (a: A, b: A1) => A2
|
|
813
|
-
) => STM.STM<A2, E1 | E, R1 | R>
|
|
814
|
-
>(
|
|
815
|
-
3,
|
|
816
|
-
(self, that, f) => pipe(self, flatMap((a) => pipe(that, map((b) => f(a, b)))))
|
|
817
|
-
)
|