@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/Context.ts
DELETED
|
@@ -1,585 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This module provides a data structure called `Context` that can be used for dependency injection in effectful
|
|
3
|
-
* programs. It is essentially a table mapping `Tag`s to their implementations (called `Service`s), and can be used to
|
|
4
|
-
* manage dependencies in a type-safe way. The `Context` data structure is essentially a way of providing access to a set
|
|
5
|
-
* of related services that can be passed around as a single unit. This module provides functions to create, modify, and
|
|
6
|
-
* query the contents of a `Context`, as well as a number of utility types for working with tags and services.
|
|
7
|
-
*
|
|
8
|
-
* @since 2.0.0
|
|
9
|
-
*/
|
|
10
|
-
import type * as Effect from "./Effect.js"
|
|
11
|
-
import type { Equal } from "./Equal.js"
|
|
12
|
-
import type { LazyArg } from "./Function.js"
|
|
13
|
-
import type { Inspectable } from "./Inspectable.js"
|
|
14
|
-
import * as internal from "./internal/context.js"
|
|
15
|
-
import type { Option } from "./Option.js"
|
|
16
|
-
import type { Pipeable } from "./Pipeable.js"
|
|
17
|
-
import type * as Types from "./Types.js"
|
|
18
|
-
import type * as Unify from "./Unify.js"
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @since 2.0.0
|
|
22
|
-
* @category symbol
|
|
23
|
-
*/
|
|
24
|
-
export const TagTypeId: unique symbol = internal.TagTypeId
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @since 2.0.0
|
|
28
|
-
* @category symbol
|
|
29
|
-
*/
|
|
30
|
-
export type TagTypeId = typeof TagTypeId
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @since 3.5.9
|
|
34
|
-
* @category models
|
|
35
|
-
*/
|
|
36
|
-
export interface Tag<in out Id, in out Value> extends Pipeable, Inspectable, ReadonlyTag<Id, Value> {
|
|
37
|
-
readonly _op: "Tag"
|
|
38
|
-
readonly Service: Value
|
|
39
|
-
readonly Identifier: Id
|
|
40
|
-
readonly [TagTypeId]: {
|
|
41
|
-
readonly _Service: Types.Invariant<Value>
|
|
42
|
-
readonly _Identifier: Types.Invariant<Id>
|
|
43
|
-
}
|
|
44
|
-
of(self: Value): Value
|
|
45
|
-
context(self: Value): Context<Id>
|
|
46
|
-
readonly stack?: string | undefined
|
|
47
|
-
readonly key: string
|
|
48
|
-
[Unify.typeSymbol]?: unknown
|
|
49
|
-
[Unify.unifySymbol]?: TagUnify<this>
|
|
50
|
-
[Unify.ignoreSymbol]?: TagUnifyIgnore
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* @since 3.5.9
|
|
55
|
-
* @category models
|
|
56
|
-
*/
|
|
57
|
-
export interface ReadonlyTag<in out Id, out Value> extends Pipeable, Inspectable, Effect.Effect<Value, never, Id> {
|
|
58
|
-
readonly _op: "Tag"
|
|
59
|
-
readonly Service: Value
|
|
60
|
-
readonly Identifier: Id
|
|
61
|
-
readonly [TagTypeId]: {
|
|
62
|
-
readonly _Service: Types.Covariant<Value>
|
|
63
|
-
readonly _Identifier: Types.Invariant<Id>
|
|
64
|
-
}
|
|
65
|
-
readonly stack?: string | undefined
|
|
66
|
-
readonly key: string
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* @since 3.11.0
|
|
71
|
-
* @category symbol
|
|
72
|
-
*/
|
|
73
|
-
export const ReferenceTypeId: unique symbol = internal.ReferenceTypeId
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* @since 3.11.0
|
|
77
|
-
* @category symbol
|
|
78
|
-
*/
|
|
79
|
-
export type ReferenceTypeId = typeof ReferenceTypeId
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* @since 3.11.0
|
|
83
|
-
* @category models
|
|
84
|
-
*/
|
|
85
|
-
export interface Reference<in out Id, in out Value> extends Pipeable, Inspectable {
|
|
86
|
-
readonly [ReferenceTypeId]: ReferenceTypeId
|
|
87
|
-
readonly defaultValue: () => Value
|
|
88
|
-
|
|
89
|
-
readonly _op: "Tag"
|
|
90
|
-
readonly Service: Value
|
|
91
|
-
readonly Identifier: Id
|
|
92
|
-
readonly [TagTypeId]: {
|
|
93
|
-
readonly _Service: Types.Invariant<Value>
|
|
94
|
-
readonly _Identifier: Types.Invariant<Id>
|
|
95
|
-
}
|
|
96
|
-
of(self: Value): Value
|
|
97
|
-
context(self: Value): Context<Id>
|
|
98
|
-
readonly stack?: string | undefined
|
|
99
|
-
readonly key: string
|
|
100
|
-
[Unify.typeSymbol]?: unknown
|
|
101
|
-
[Unify.unifySymbol]?: TagUnify<this>
|
|
102
|
-
[Unify.ignoreSymbol]?: TagUnifyIgnore
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* @since 2.0.0
|
|
107
|
-
* @category models
|
|
108
|
-
*/
|
|
109
|
-
export interface TagClassShape<Id, Shape> {
|
|
110
|
-
readonly [TagTypeId]: TagTypeId
|
|
111
|
-
readonly Type: Shape
|
|
112
|
-
readonly Id: Id
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// TODO(4.0): move key narrowing to the Tag interface
|
|
116
|
-
/**
|
|
117
|
-
* @since 2.0.0
|
|
118
|
-
* @category models
|
|
119
|
-
*/
|
|
120
|
-
export interface TagClass<Self, Id extends string, Type> extends Tag<Self, Type> {
|
|
121
|
-
new(_: never): TagClassShape<Id, Type>
|
|
122
|
-
readonly key: Id
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// TODO(4.0): move key narrowing to the Reference interface
|
|
126
|
-
/**
|
|
127
|
-
* @since 3.11.0
|
|
128
|
-
* @category models
|
|
129
|
-
*/
|
|
130
|
-
export interface ReferenceClass<Self, Id extends string, Type> extends Reference<Self, Type> {
|
|
131
|
-
new(_: never): TagClassShape<Id, Type>
|
|
132
|
-
readonly key: Id
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* @category models
|
|
137
|
-
* @since 2.0.0
|
|
138
|
-
*/
|
|
139
|
-
export interface TagUnify<A extends { [Unify.typeSymbol]?: any }> {
|
|
140
|
-
Tag?: () => Extract<A[Unify.typeSymbol], Tag<any, any>>
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* @category models
|
|
145
|
-
* @since 2.0.0
|
|
146
|
-
*/
|
|
147
|
-
export interface TagUnifyIgnore {}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* @since 2.0.0
|
|
151
|
-
*/
|
|
152
|
-
export declare namespace Tag {
|
|
153
|
-
/**
|
|
154
|
-
* @since 2.0.0
|
|
155
|
-
*/
|
|
156
|
-
export type Service<T extends Tag<any, any> | TagClassShape<any, any>> = T extends Tag<any, any> ? T["Service"]
|
|
157
|
-
: T extends TagClassShape<any, infer A> ? A
|
|
158
|
-
: never
|
|
159
|
-
/**
|
|
160
|
-
* @since 2.0.0
|
|
161
|
-
*/
|
|
162
|
-
export type Identifier<T extends Tag<any, any> | TagClassShape<any, any>> = T extends Tag<any, any> ? T["Identifier"]
|
|
163
|
-
: T extends TagClassShape<any, any> ? T
|
|
164
|
-
: never
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Creates a new `Tag` instance with an optional key parameter.
|
|
169
|
-
*
|
|
170
|
-
* @example
|
|
171
|
-
* ```ts
|
|
172
|
-
* import * as assert from "node:assert"
|
|
173
|
-
* import { Context } from "effect"
|
|
174
|
-
*
|
|
175
|
-
* assert.strictEqual(Context.GenericTag("PORT").key === Context.GenericTag("PORT").key, true)
|
|
176
|
-
* ```
|
|
177
|
-
*
|
|
178
|
-
* @since 2.0.0
|
|
179
|
-
* @category constructors
|
|
180
|
-
*/
|
|
181
|
-
export const GenericTag: <Identifier, Service = Identifier>(key: string) => Tag<Identifier, Service> =
|
|
182
|
-
internal.makeGenericTag
|
|
183
|
-
|
|
184
|
-
const TypeId: unique symbol = internal.TypeId as TypeId
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* @since 2.0.0
|
|
188
|
-
* @category symbol
|
|
189
|
-
*/
|
|
190
|
-
export type TypeId = typeof TypeId
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* @since 2.0.0
|
|
194
|
-
* @category models
|
|
195
|
-
*/
|
|
196
|
-
export type ValidTagsById<R> = R extends infer S ? Tag<S, any> : never
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* @since 2.0.0
|
|
200
|
-
* @category models
|
|
201
|
-
*/
|
|
202
|
-
export interface Context<in Services> extends Equal, Pipeable, Inspectable {
|
|
203
|
-
readonly [TypeId]: {
|
|
204
|
-
readonly _Services: Types.Contravariant<Services>
|
|
205
|
-
}
|
|
206
|
-
readonly unsafeMap: Map<string, any>
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* @since 2.0.0
|
|
211
|
-
* @category constructors
|
|
212
|
-
*/
|
|
213
|
-
export const unsafeMake: <Services>(unsafeMap: Map<string, any>) => Context<Services> = internal.makeContext
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Checks if the provided argument is a `Context`.
|
|
217
|
-
*
|
|
218
|
-
* @example
|
|
219
|
-
* ```ts
|
|
220
|
-
* import * as assert from "node:assert"
|
|
221
|
-
* import { Context } from "effect"
|
|
222
|
-
*
|
|
223
|
-
* assert.strictEqual(Context.isContext(Context.empty()), true)
|
|
224
|
-
* ```
|
|
225
|
-
*
|
|
226
|
-
* @since 2.0.0
|
|
227
|
-
* @category guards
|
|
228
|
-
*/
|
|
229
|
-
export const isContext: (input: unknown) => input is Context<never> = internal.isContext
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Checks if the provided argument is a `Tag`.
|
|
233
|
-
*
|
|
234
|
-
* @example
|
|
235
|
-
* ```ts
|
|
236
|
-
* import * as assert from "node:assert"
|
|
237
|
-
* import { Context } from "effect"
|
|
238
|
-
*
|
|
239
|
-
* assert.strictEqual(Context.isTag(Context.GenericTag("Tag")), true)
|
|
240
|
-
* ```
|
|
241
|
-
*
|
|
242
|
-
* @since 2.0.0
|
|
243
|
-
* @category guards
|
|
244
|
-
*/
|
|
245
|
-
export const isTag: (input: unknown) => input is Tag<any, any> = internal.isTag
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Checks if the provided argument is a `Reference`.
|
|
249
|
-
*
|
|
250
|
-
* @since 3.11.0
|
|
251
|
-
* @category guards
|
|
252
|
-
* @experimental
|
|
253
|
-
*/
|
|
254
|
-
export const isReference: (u: unknown) => u is Reference<any, any> = internal.isReference
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Returns an empty `Context`.
|
|
258
|
-
*
|
|
259
|
-
* @example
|
|
260
|
-
* ```ts
|
|
261
|
-
* import * as assert from "node:assert"
|
|
262
|
-
* import { Context } from "effect"
|
|
263
|
-
*
|
|
264
|
-
* assert.strictEqual(Context.isContext(Context.empty()), true)
|
|
265
|
-
* ```
|
|
266
|
-
*
|
|
267
|
-
* @since 2.0.0
|
|
268
|
-
* @category constructors
|
|
269
|
-
*/
|
|
270
|
-
export const empty: () => Context<never> = internal.empty
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Creates a new `Context` with a single service associated to the tag.
|
|
274
|
-
*
|
|
275
|
-
* @example
|
|
276
|
-
* ```ts
|
|
277
|
-
* import * as assert from "node:assert"
|
|
278
|
-
* import { Context } from "effect"
|
|
279
|
-
*
|
|
280
|
-
* const Port = Context.GenericTag<{ PORT: number }>("Port")
|
|
281
|
-
*
|
|
282
|
-
* const Services = Context.make(Port, { PORT: 8080 })
|
|
283
|
-
*
|
|
284
|
-
* assert.deepStrictEqual(Context.get(Services, Port), { PORT: 8080 })
|
|
285
|
-
* ```
|
|
286
|
-
*
|
|
287
|
-
* @since 2.0.0
|
|
288
|
-
* @category constructors
|
|
289
|
-
*/
|
|
290
|
-
export const make: <I, S>(tag: Tag<I, S>, service: Types.NoInfer<S>) => Context<I> = internal.make
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Adds a service to a given `Context`.
|
|
294
|
-
*
|
|
295
|
-
* @example
|
|
296
|
-
* ```ts
|
|
297
|
-
* import * as assert from "node:assert"
|
|
298
|
-
* import { Context, pipe } from "effect"
|
|
299
|
-
*
|
|
300
|
-
* const Port = Context.GenericTag<{ PORT: number }>("Port")
|
|
301
|
-
* const Timeout = Context.GenericTag<{ TIMEOUT: number }>("Timeout")
|
|
302
|
-
*
|
|
303
|
-
* const someContext = Context.make(Port, { PORT: 8080 })
|
|
304
|
-
*
|
|
305
|
-
* const Services = pipe(
|
|
306
|
-
* someContext,
|
|
307
|
-
* Context.add(Timeout, { TIMEOUT: 5000 })
|
|
308
|
-
* )
|
|
309
|
-
*
|
|
310
|
-
* assert.deepStrictEqual(Context.get(Services, Port), { PORT: 8080 })
|
|
311
|
-
* assert.deepStrictEqual(Context.get(Services, Timeout), { TIMEOUT: 5000 })
|
|
312
|
-
* ```
|
|
313
|
-
*
|
|
314
|
-
* @since 2.0.0
|
|
315
|
-
*/
|
|
316
|
-
export const add: {
|
|
317
|
-
<I, S>(tag: Tag<I, S>, service: Types.NoInfer<S>): <Services>(self: Context<Services>) => Context<Services | I>
|
|
318
|
-
<Services, I, S>(self: Context<Services>, tag: Tag<I, S>, service: Types.NoInfer<S>): Context<Services | I>
|
|
319
|
-
} = internal.add
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Get a service from the context that corresponds to the given tag.
|
|
323
|
-
*
|
|
324
|
-
* @example
|
|
325
|
-
* ```ts
|
|
326
|
-
* import * as assert from "node:assert"
|
|
327
|
-
* import { pipe, Context } from "effect"
|
|
328
|
-
*
|
|
329
|
-
* const Port = Context.GenericTag<{ PORT: number }>("Port")
|
|
330
|
-
* const Timeout = Context.GenericTag<{ TIMEOUT: number }>("Timeout")
|
|
331
|
-
*
|
|
332
|
-
* const Services = pipe(
|
|
333
|
-
* Context.make(Port, { PORT: 8080 }),
|
|
334
|
-
* Context.add(Timeout, { TIMEOUT: 5000 })
|
|
335
|
-
* )
|
|
336
|
-
*
|
|
337
|
-
* assert.deepStrictEqual(Context.get(Services, Timeout), { TIMEOUT: 5000 })
|
|
338
|
-
* ```
|
|
339
|
-
*
|
|
340
|
-
* @since 2.0.0
|
|
341
|
-
* @category getters
|
|
342
|
-
*/
|
|
343
|
-
export const get: {
|
|
344
|
-
<I, S>(tag: Reference<I, S>): <Services>(self: Context<Services>) => S
|
|
345
|
-
<Services, I extends Services, S>(tag: Tag<I, S>): (self: Context<Services>) => S
|
|
346
|
-
<Services, I, S>(self: Context<Services>, tag: Reference<I, S>): S
|
|
347
|
-
<Services, I extends Services, S>(self: Context<Services>, tag: Tag<I, S>): S
|
|
348
|
-
} = internal.get
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* Get a service from the context that corresponds to the given tag, or
|
|
352
|
-
* use the fallback value.
|
|
353
|
-
*
|
|
354
|
-
* @since 3.7.0
|
|
355
|
-
* @category getters
|
|
356
|
-
*/
|
|
357
|
-
export const getOrElse: {
|
|
358
|
-
<S, I, B>(tag: Tag<I, S>, orElse: LazyArg<B>): <Services>(self: Context<Services>) => S | B
|
|
359
|
-
<Services, S, I, B>(self: Context<Services>, tag: Tag<I, S>, orElse: LazyArg<B>): S | B
|
|
360
|
-
} = internal.getOrElse
|
|
361
|
-
|
|
362
|
-
/**
|
|
363
|
-
* Get a service from the context that corresponds to the given tag.
|
|
364
|
-
* This function is unsafe because if the tag is not present in the context, a runtime error will be thrown.
|
|
365
|
-
*
|
|
366
|
-
* For a safer version see {@link getOption}.
|
|
367
|
-
*
|
|
368
|
-
* @example
|
|
369
|
-
* ```ts
|
|
370
|
-
* import * as assert from "node:assert"
|
|
371
|
-
* import { Context } from "effect"
|
|
372
|
-
*
|
|
373
|
-
* const Port = Context.GenericTag<{ PORT: number }>("Port")
|
|
374
|
-
* const Timeout = Context.GenericTag<{ TIMEOUT: number }>("Timeout")
|
|
375
|
-
*
|
|
376
|
-
* const Services = Context.make(Port, { PORT: 8080 })
|
|
377
|
-
*
|
|
378
|
-
* assert.deepStrictEqual(Context.unsafeGet(Services, Port), { PORT: 8080 })
|
|
379
|
-
* assert.throws(() => Context.unsafeGet(Services, Timeout))
|
|
380
|
-
* ```
|
|
381
|
-
*
|
|
382
|
-
* @since 2.0.0
|
|
383
|
-
* @category unsafe
|
|
384
|
-
*/
|
|
385
|
-
export const unsafeGet: {
|
|
386
|
-
<S, I>(tag: Tag<I, S>): <Services>(self: Context<Services>) => S
|
|
387
|
-
<Services, S, I>(self: Context<Services>, tag: Tag<I, S>): S
|
|
388
|
-
} = internal.unsafeGet
|
|
389
|
-
|
|
390
|
-
/**
|
|
391
|
-
* Get the value associated with the specified tag from the context wrapped in an `Option` object. If the tag is not
|
|
392
|
-
* found, the `Option` object will be `None`.
|
|
393
|
-
*
|
|
394
|
-
* @example
|
|
395
|
-
* ```ts
|
|
396
|
-
* import * as assert from "node:assert"
|
|
397
|
-
* import { Context, Option } from "effect"
|
|
398
|
-
*
|
|
399
|
-
* const Port = Context.GenericTag<{ PORT: number }>("Port")
|
|
400
|
-
* const Timeout = Context.GenericTag<{ TIMEOUT: number }>("Timeout")
|
|
401
|
-
*
|
|
402
|
-
* const Services = Context.make(Port, { PORT: 8080 })
|
|
403
|
-
*
|
|
404
|
-
* assert.deepStrictEqual(Context.getOption(Services, Port), Option.some({ PORT: 8080 }))
|
|
405
|
-
* assert.deepStrictEqual(Context.getOption(Services, Timeout), Option.none())
|
|
406
|
-
* ```
|
|
407
|
-
*
|
|
408
|
-
* @since 2.0.0
|
|
409
|
-
* @category getters
|
|
410
|
-
*/
|
|
411
|
-
export const getOption: {
|
|
412
|
-
<S, I>(tag: Tag<I, S>): <Services>(self: Context<Services>) => Option<S>
|
|
413
|
-
<Services, S, I>(self: Context<Services>, tag: Tag<I, S>): Option<S>
|
|
414
|
-
} = internal.getOption
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Merges two `Context`s, returning a new `Context` containing the services of both.
|
|
418
|
-
*
|
|
419
|
-
* @example
|
|
420
|
-
* ```ts
|
|
421
|
-
* import * as assert from "node:assert"
|
|
422
|
-
* import { Context } from "effect"
|
|
423
|
-
*
|
|
424
|
-
* const Port = Context.GenericTag<{ PORT: number }>("Port")
|
|
425
|
-
* const Timeout = Context.GenericTag<{ TIMEOUT: number }>("Timeout")
|
|
426
|
-
*
|
|
427
|
-
* const firstContext = Context.make(Port, { PORT: 8080 })
|
|
428
|
-
* const secondContext = Context.make(Timeout, { TIMEOUT: 5000 })
|
|
429
|
-
*
|
|
430
|
-
* const Services = Context.merge(firstContext, secondContext)
|
|
431
|
-
*
|
|
432
|
-
* assert.deepStrictEqual(Context.get(Services, Port), { PORT: 8080 })
|
|
433
|
-
* assert.deepStrictEqual(Context.get(Services, Timeout), { TIMEOUT: 5000 })
|
|
434
|
-
* ```
|
|
435
|
-
*
|
|
436
|
-
* @since 2.0.0
|
|
437
|
-
*/
|
|
438
|
-
export const merge: {
|
|
439
|
-
<R1>(that: Context<R1>): <Services>(self: Context<Services>) => Context<R1 | Services>
|
|
440
|
-
<Services, R1>(self: Context<Services>, that: Context<R1>): Context<Services | R1>
|
|
441
|
-
} = internal.merge
|
|
442
|
-
|
|
443
|
-
/**
|
|
444
|
-
* Merges any number of `Context`s, returning a new `Context` containing the services of all.
|
|
445
|
-
*
|
|
446
|
-
* @example
|
|
447
|
-
* ```ts
|
|
448
|
-
* import * as assert from "node:assert"
|
|
449
|
-
* import { Context } from "effect"
|
|
450
|
-
*
|
|
451
|
-
* const Port = Context.GenericTag<{ PORT: number }>("Port")
|
|
452
|
-
* const Timeout = Context.GenericTag<{ TIMEOUT: number }>("Timeout")
|
|
453
|
-
* const Host = Context.GenericTag<{ HOST: string }>("Host")
|
|
454
|
-
*
|
|
455
|
-
* const firstContext = Context.make(Port, { PORT: 8080 })
|
|
456
|
-
* const secondContext = Context.make(Timeout, { TIMEOUT: 5000 })
|
|
457
|
-
* const thirdContext = Context.make(Host, { HOST: "localhost" })
|
|
458
|
-
*
|
|
459
|
-
* const Services = Context.mergeAll(firstContext, secondContext, thirdContext)
|
|
460
|
-
*
|
|
461
|
-
* assert.deepStrictEqual(Context.get(Services, Port), { PORT: 8080 })
|
|
462
|
-
* assert.deepStrictEqual(Context.get(Services, Timeout), { TIMEOUT: 5000 })
|
|
463
|
-
* assert.deepStrictEqual(Context.get(Services, Host), { HOST: "localhost" })
|
|
464
|
-
* ```
|
|
465
|
-
*
|
|
466
|
-
* @since 3.12.0
|
|
467
|
-
*/
|
|
468
|
-
export const mergeAll: <T extends Array<unknown>>(
|
|
469
|
-
...ctxs: [...{ [K in keyof T]: Context<T[K]> }]
|
|
470
|
-
) => Context<T[number]> = internal.mergeAll
|
|
471
|
-
|
|
472
|
-
/**
|
|
473
|
-
* Returns a new `Context` that contains only the specified services.
|
|
474
|
-
*
|
|
475
|
-
* @example
|
|
476
|
-
* ```ts
|
|
477
|
-
* import * as assert from "node:assert"
|
|
478
|
-
* import { pipe, Context, Option } from "effect"
|
|
479
|
-
*
|
|
480
|
-
* const Port = Context.GenericTag<{ PORT: number }>("Port")
|
|
481
|
-
* const Timeout = Context.GenericTag<{ TIMEOUT: number }>("Timeout")
|
|
482
|
-
*
|
|
483
|
-
* const someContext = pipe(
|
|
484
|
-
* Context.make(Port, { PORT: 8080 }),
|
|
485
|
-
* Context.add(Timeout, { TIMEOUT: 5000 })
|
|
486
|
-
* )
|
|
487
|
-
*
|
|
488
|
-
* const Services = pipe(someContext, Context.pick(Port))
|
|
489
|
-
*
|
|
490
|
-
* assert.deepStrictEqual(Context.getOption(Services, Port), Option.some({ PORT: 8080 }))
|
|
491
|
-
* assert.deepStrictEqual(Context.getOption(Services, Timeout), Option.none())
|
|
492
|
-
* ```
|
|
493
|
-
*
|
|
494
|
-
* @since 2.0.0
|
|
495
|
-
*/
|
|
496
|
-
export const pick: <Tags extends ReadonlyArray<Tag<any, any>>>(
|
|
497
|
-
...tags: Tags
|
|
498
|
-
) => <Services>(self: Context<Services>) => Context<Services & Tag.Identifier<Tags[number]>> = internal.pick
|
|
499
|
-
|
|
500
|
-
/**
|
|
501
|
-
* @since 2.0.0
|
|
502
|
-
*/
|
|
503
|
-
export const omit: <Tags extends ReadonlyArray<Tag<any, any>>>(
|
|
504
|
-
...tags: Tags
|
|
505
|
-
) => <Services>(self: Context<Services>) => Context<Exclude<Services, Tag.Identifier<Tags[number]>>> = internal.omit
|
|
506
|
-
|
|
507
|
-
/**
|
|
508
|
-
* @example
|
|
509
|
-
* ```ts
|
|
510
|
-
* import * as assert from "node:assert"
|
|
511
|
-
* import { Context, Layer } from "effect"
|
|
512
|
-
*
|
|
513
|
-
* class MyTag extends Context.Tag("MyTag")<
|
|
514
|
-
* MyTag,
|
|
515
|
-
* { readonly myNum: number }
|
|
516
|
-
* >() {
|
|
517
|
-
* static Live = Layer.succeed(this, { myNum: 108 })
|
|
518
|
-
* }
|
|
519
|
-
* ```
|
|
520
|
-
*
|
|
521
|
-
* @since 2.0.0
|
|
522
|
-
* @category constructors
|
|
523
|
-
*/
|
|
524
|
-
export const Tag: <const Id extends string>(id: Id) => <Self, Shape>() => TagClass<Self, Id, Shape> = internal.Tag
|
|
525
|
-
|
|
526
|
-
/**
|
|
527
|
-
* Creates a context tag with a default value.
|
|
528
|
-
*
|
|
529
|
-
* **Details**
|
|
530
|
-
*
|
|
531
|
-
* `Context.Reference` allows you to create a tag that can hold a value. You can
|
|
532
|
-
* provide a default value for the service, which will automatically be used
|
|
533
|
-
* when the context is accessed, or override it with a custom implementation
|
|
534
|
-
* when needed.
|
|
535
|
-
*
|
|
536
|
-
* **Example** (Declaring a Tag with a default value)
|
|
537
|
-
*
|
|
538
|
-
* ```ts
|
|
539
|
-
* import * as assert from "node:assert"
|
|
540
|
-
* import { Context, Effect } from "effect"
|
|
541
|
-
*
|
|
542
|
-
* class SpecialNumber extends Context.Reference<SpecialNumber>()(
|
|
543
|
-
* "SpecialNumber",
|
|
544
|
-
* { defaultValue: () => 2048 }
|
|
545
|
-
* ) {}
|
|
546
|
-
*
|
|
547
|
-
* // ┌─── Effect<void, never, never>
|
|
548
|
-
* // ▼
|
|
549
|
-
* const program = Effect.gen(function* () {
|
|
550
|
-
* const specialNumber = yield* SpecialNumber
|
|
551
|
-
* console.log(`The special number is ${specialNumber}`)
|
|
552
|
-
* })
|
|
553
|
-
*
|
|
554
|
-
* // No need to provide the SpecialNumber implementation
|
|
555
|
-
* Effect.runPromise(program)
|
|
556
|
-
* // Output: The special number is 2048
|
|
557
|
-
* ```
|
|
558
|
-
*
|
|
559
|
-
* **Example** (Overriding the default value)
|
|
560
|
-
*
|
|
561
|
-
* ```ts
|
|
562
|
-
* import { Context, Effect } from "effect"
|
|
563
|
-
*
|
|
564
|
-
* class SpecialNumber extends Context.Reference<SpecialNumber>()(
|
|
565
|
-
* "SpecialNumber",
|
|
566
|
-
* { defaultValue: () => 2048 }
|
|
567
|
-
* ) {}
|
|
568
|
-
*
|
|
569
|
-
* const program = Effect.gen(function* () {
|
|
570
|
-
* const specialNumber = yield* SpecialNumber
|
|
571
|
-
* console.log(`The special number is ${specialNumber}`)
|
|
572
|
-
* })
|
|
573
|
-
*
|
|
574
|
-
* Effect.runPromise(program.pipe(Effect.provideService(SpecialNumber, -1)))
|
|
575
|
-
* // Output: The special number is -1
|
|
576
|
-
* ```
|
|
577
|
-
*
|
|
578
|
-
* @since 3.11.0
|
|
579
|
-
* @category constructors
|
|
580
|
-
* @experimental
|
|
581
|
-
*/
|
|
582
|
-
export const Reference: <Self>() => <const Id extends string, Service>(
|
|
583
|
-
id: Id,
|
|
584
|
-
options: { readonly defaultValue: () => Service }
|
|
585
|
-
) => ReferenceClass<Self, Id, Service> = internal.Reference
|