effect 4.0.0-beta.6 → 4.0.0-beta.62
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/Array.d.ts +213 -385
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +149 -102
- package/dist/Array.js.map +1 -1
- package/dist/BigDecimal.d.ts +82 -45
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +105 -52
- package/dist/BigDecimal.js.map +1 -1
- package/dist/BigInt.d.ts +39 -32
- package/dist/BigInt.d.ts.map +1 -1
- package/dist/BigInt.js +36 -33
- package/dist/BigInt.js.map +1 -1
- package/dist/Brand.d.ts +3 -5
- package/dist/Brand.d.ts.map +1 -1
- package/dist/Brand.js +1 -1
- package/dist/Brand.js.map +1 -1
- package/dist/Cache.d.ts +14 -45
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +21 -47
- package/dist/Cache.js.map +1 -1
- package/dist/Cause.d.ts +53 -22
- package/dist/Cause.d.ts.map +1 -1
- package/dist/Cause.js +108 -10
- package/dist/Cause.js.map +1 -1
- package/dist/Channel.d.ts +166 -48
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +176 -87
- package/dist/Channel.js.map +1 -1
- package/dist/Chunk.d.ts +112 -304
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +56 -88
- package/dist/Chunk.js.map +1 -1
- package/dist/Clock.d.ts +2 -2
- package/dist/Clock.d.ts.map +1 -1
- package/dist/Clock.js.map +1 -1
- package/dist/Combiner.d.ts +280 -13
- package/dist/Combiner.d.ts.map +1 -1
- package/dist/Combiner.js +198 -7
- package/dist/Combiner.js.map +1 -1
- package/dist/Config.d.ts +189 -29
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +85 -35
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts +6 -6
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +5 -5
- package/dist/ConfigProvider.js.map +1 -1
- package/dist/Console.d.ts +2 -2
- package/dist/Console.d.ts.map +1 -1
- package/dist/Console.js.map +1 -1
- package/dist/Context.d.ts +1150 -0
- package/dist/Context.d.ts.map +1 -0
- package/dist/{ServiceMap.js → Context.js} +181 -165
- package/dist/Context.js.map +1 -0
- package/dist/Cron.d.ts +11 -7
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +120 -63
- package/dist/Cron.js.map +1 -1
- package/dist/Data.d.ts +533 -365
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js +125 -73
- package/dist/Data.js.map +1 -1
- package/dist/DateTime.d.ts +74 -255
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +17 -62
- package/dist/DateTime.js.map +1 -1
- package/dist/Deferred.d.ts +12 -5
- package/dist/Deferred.d.ts.map +1 -1
- package/dist/Deferred.js +13 -5
- package/dist/Deferred.js.map +1 -1
- package/dist/Duration.d.ts +74 -40
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +126 -87
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +1435 -927
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +516 -328
- package/dist/Effect.js.map +1 -1
- package/dist/Effectable.d.ts +29 -0
- package/dist/Effectable.d.ts.map +1 -0
- package/dist/Effectable.js +31 -0
- package/dist/Effectable.js.map +1 -0
- package/dist/Encoding.d.ts +1 -1
- package/dist/Equal.d.ts +276 -109
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +140 -48
- package/dist/Equal.js.map +1 -1
- package/dist/Equivalence.d.ts +60 -3
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +70 -13
- package/dist/Equivalence.js.map +1 -1
- package/dist/ErrorReporter.d.ts +374 -0
- package/dist/ErrorReporter.d.ts.map +1 -0
- package/dist/ErrorReporter.js +245 -0
- package/dist/ErrorReporter.js.map +1 -0
- package/dist/ExecutionPlan.d.ts +6 -6
- package/dist/ExecutionPlan.d.ts.map +1 -1
- package/dist/ExecutionPlan.js +4 -4
- package/dist/ExecutionPlan.js.map +1 -1
- package/dist/Exit.d.ts +24 -12
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js +8 -4
- package/dist/Exit.js.map +1 -1
- package/dist/Fiber.d.ts +10 -8
- package/dist/Fiber.d.ts.map +1 -1
- package/dist/Fiber.js.map +1 -1
- package/dist/FiberHandle.d.ts +11 -10
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +12 -11
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +22 -21
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +10 -10
- package/dist/FiberMap.js.map +1 -1
- package/dist/FiberSet.d.ts +2 -2
- package/dist/FiberSet.d.ts.map +1 -1
- package/dist/FiberSet.js +4 -4
- package/dist/FiberSet.js.map +1 -1
- package/dist/FileSystem.d.ts +20 -19
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +15 -11
- package/dist/FileSystem.js.map +1 -1
- package/dist/Filter.d.ts +4 -37
- package/dist/Filter.d.ts.map +1 -1
- package/dist/Filter.js +0 -13
- package/dist/Filter.js.map +1 -1
- package/dist/Formatter.d.ts +131 -47
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +243 -55
- package/dist/Formatter.js.map +1 -1
- package/dist/Function.d.ts +1 -9
- package/dist/Function.d.ts.map +1 -1
- package/dist/Function.js +2 -10
- package/dist/Function.js.map +1 -1
- package/dist/Graph.d.ts +65 -65
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js +58 -60
- package/dist/Graph.js.map +1 -1
- package/dist/Hash.js +1 -1
- package/dist/Hash.js.map +1 -1
- package/dist/HashMap.d.ts +26 -19
- package/dist/HashMap.d.ts.map +1 -1
- package/dist/HashMap.js +7 -5
- package/dist/HashMap.js.map +1 -1
- package/dist/Inspectable.d.ts +0 -4
- package/dist/Inspectable.d.ts.map +1 -1
- package/dist/Inspectable.js +4 -13
- package/dist/Inspectable.js.map +1 -1
- package/dist/Iterable.d.ts +50 -50
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +106 -34
- package/dist/Iterable.js.map +1 -1
- package/dist/JsonSchema.d.ts +299 -10
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +323 -4
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Latch.d.ts +69 -3
- package/dist/Latch.d.ts.map +1 -1
- package/dist/Latch.js +58 -0
- package/dist/Latch.js.map +1 -1
- package/dist/Layer.d.ts +599 -379
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +249 -180
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMap.d.ts +27 -26
- package/dist/LayerMap.d.ts.map +1 -1
- package/dist/LayerMap.js +21 -18
- package/dist/LayerMap.js.map +1 -1
- package/dist/LogLevel.d.ts +32 -0
- package/dist/LogLevel.d.ts.map +1 -1
- package/dist/LogLevel.js +28 -100
- package/dist/LogLevel.js.map +1 -1
- package/dist/Logger.d.ts +31 -97
- package/dist/Logger.d.ts.map +1 -1
- package/dist/Logger.js +2 -3
- package/dist/Logger.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +8 -8
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +34 -25
- package/dist/ManagedRuntime.js.map +1 -1
- package/dist/Metric.d.ts +23 -25
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +24 -26
- package/dist/Metric.js.map +1 -1
- package/dist/MutableHashMap.d.ts +7 -0
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js +8 -0
- package/dist/MutableHashMap.js.map +1 -1
- package/dist/MutableHashSet.d.ts +7 -0
- package/dist/MutableHashSet.d.ts.map +1 -1
- package/dist/MutableHashSet.js +8 -0
- package/dist/MutableHashSet.js.map +1 -1
- package/dist/MutableList.d.ts.map +1 -1
- package/dist/MutableList.js +3 -0
- package/dist/MutableList.js.map +1 -1
- package/dist/Newtype.d.ts +291 -0
- package/dist/Newtype.d.ts.map +1 -0
- package/dist/Newtype.js +161 -0
- package/dist/Newtype.js.map +1 -0
- package/dist/Number.d.ts +74 -18
- package/dist/Number.d.ts.map +1 -1
- package/dist/Number.js +46 -18
- package/dist/Number.js.map +1 -1
- package/dist/Optic.d.ts +947 -18
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js +454 -5
- package/dist/Optic.js.map +1 -1
- package/dist/Option.d.ts +25 -16
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +15 -9
- package/dist/Option.js.map +1 -1
- package/dist/Order.d.ts +6 -1
- package/dist/Order.d.ts.map +1 -1
- package/dist/Order.js +19 -14
- package/dist/Order.js.map +1 -1
- package/dist/PartitionedSemaphore.d.ts +183 -0
- package/dist/PartitionedSemaphore.d.ts.map +1 -0
- package/dist/PartitionedSemaphore.js +231 -0
- package/dist/PartitionedSemaphore.js.map +1 -0
- package/dist/Path.d.ts +2 -2
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +2 -2
- package/dist/Path.js.map +1 -1
- package/dist/PlatformError.d.ts +2 -2
- package/dist/Pool.d.ts +1 -1
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +5 -5
- package/dist/Pool.js.map +1 -1
- package/dist/Predicate.d.ts +1 -1
- package/dist/Predicate.d.ts.map +1 -1
- package/dist/PubSub.d.ts +5 -4
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +15 -8
- package/dist/PubSub.js.map +1 -1
- package/dist/Pull.d.ts.map +1 -1
- package/dist/Pull.js +1 -1
- package/dist/Pull.js.map +1 -1
- package/dist/Queue.d.ts +9 -6
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +7 -5
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts +36 -2
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +46 -35
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +4 -4
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +13 -13
- package/dist/RcMap.js.map +1 -1
- package/dist/RcRef.d.ts +1 -1
- package/dist/RcRef.d.ts.map +1 -1
- package/dist/Record.d.ts +63 -160
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +37 -56
- package/dist/Record.js.map +1 -1
- package/dist/Redactable.d.ts +139 -62
- package/dist/Redactable.d.ts.map +1 -1
- package/dist/Redactable.js +59 -55
- package/dist/Redactable.js.map +1 -1
- package/dist/Reducer.d.ts +166 -7
- package/dist/Reducer.d.ts.map +1 -1
- package/dist/Reducer.js +135 -1
- package/dist/Reducer.js.map +1 -1
- package/dist/References.d.ts +257 -229
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +240 -259
- package/dist/References.js.map +1 -1
- package/dist/Request.d.ts +5 -5
- package/dist/Request.d.ts.map +1 -1
- package/dist/Request.js.map +1 -1
- package/dist/RequestResolver.d.ts +25 -25
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +15 -16
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Resource.d.ts +0 -3
- package/dist/Resource.d.ts.map +1 -1
- package/dist/Resource.js +5 -4
- package/dist/Resource.js.map +1 -1
- package/dist/Result.d.ts +1 -1
- package/dist/Result.d.ts.map +1 -1
- package/dist/Result.js +1 -2
- package/dist/Result.js.map +1 -1
- package/dist/Runtime.d.ts +66 -0
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +79 -6
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts +174 -291
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +132 -120
- package/dist/Schedule.js.map +1 -1
- package/dist/Scheduler.d.ts +36 -125
- package/dist/Scheduler.d.ts.map +1 -1
- package/dist/Scheduler.js +37 -126
- package/dist/Scheduler.js.map +1 -1
- package/dist/Schema.d.ts +3213 -392
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2058 -252
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +13 -2
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +340 -257
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +55 -13
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +73 -11
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +29 -11
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaParser.d.ts +44 -54
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +69 -4
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +2 -2
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +63 -39
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +245 -3
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +297 -33
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/Scope.d.ts +2 -2
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js.map +1 -1
- package/dist/ScopedCache.d.ts +2 -2
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +5 -5
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +148 -52
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +135 -117
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts +22 -19
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +54 -7
- package/dist/Sink.js.map +1 -1
- package/dist/Stdio.d.ts +18 -6
- package/dist/Stdio.d.ts.map +1 -1
- package/dist/Stdio.js +20 -2
- package/dist/Stdio.js.map +1 -1
- package/dist/Stream.d.ts +465 -542
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +329 -145
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +114 -47
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +29 -47
- package/dist/String.js.map +1 -1
- package/dist/Struct.d.ts +7 -7
- package/dist/Struct.d.ts.map +1 -1
- package/dist/SubscriptionRef.d.ts +1 -2
- package/dist/SubscriptionRef.d.ts.map +1 -1
- package/dist/SubscriptionRef.js +83 -116
- package/dist/SubscriptionRef.js.map +1 -1
- package/dist/Terminal.d.ts +5 -4
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +2 -2
- package/dist/Terminal.js.map +1 -1
- package/dist/Tracer.d.ts +21 -20
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +13 -9
- package/dist/Tracer.js.map +1 -1
- package/dist/Trie.d.ts +44 -31
- package/dist/Trie.d.ts.map +1 -1
- package/dist/Trie.js +13 -9
- package/dist/Trie.js.map +1 -1
- package/dist/TxChunk.d.ts +4 -4
- package/dist/TxChunk.d.ts.map +1 -1
- package/dist/TxChunk.js +4 -4
- package/dist/TxChunk.js.map +1 -1
- package/dist/TxDeferred.d.ts +328 -0
- package/dist/TxDeferred.d.ts.map +1 -0
- package/dist/TxDeferred.js +197 -0
- package/dist/TxDeferred.js.map +1 -0
- package/dist/TxHashMap.d.ts +105 -86
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js +51 -44
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts +2 -2
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js +16 -15
- package/dist/TxHashSet.js.map +1 -1
- package/dist/TxPriorityQueue.d.ts +609 -0
- package/dist/TxPriorityQueue.d.ts.map +1 -0
- package/dist/TxPriorityQueue.js +416 -0
- package/dist/TxPriorityQueue.js.map +1 -0
- package/dist/TxPubSub.d.ts +585 -0
- package/dist/TxPubSub.d.ts.map +1 -0
- package/dist/TxPubSub.js +521 -0
- package/dist/TxPubSub.js.map +1 -0
- package/dist/TxQueue.d.ts +1 -1
- package/dist/TxQueue.d.ts.map +1 -1
- package/dist/TxQueue.js +42 -57
- package/dist/TxQueue.js.map +1 -1
- package/dist/TxReentrantLock.d.ts +500 -0
- package/dist/TxReentrantLock.d.ts.map +1 -0
- package/dist/TxReentrantLock.js +481 -0
- package/dist/TxReentrantLock.js.map +1 -0
- package/dist/TxRef.d.ts +14 -20
- package/dist/TxRef.d.ts.map +1 -1
- package/dist/TxRef.js +8 -10
- package/dist/TxRef.js.map +1 -1
- package/dist/TxSemaphore.d.ts +162 -2
- package/dist/TxSemaphore.d.ts.map +1 -1
- package/dist/TxSemaphore.js +25 -10
- package/dist/TxSemaphore.js.map +1 -1
- package/dist/TxSubscriptionRef.d.ts +508 -0
- package/dist/TxSubscriptionRef.d.ts.map +1 -0
- package/dist/TxSubscriptionRef.js +293 -0
- package/dist/TxSubscriptionRef.js.map +1 -0
- package/dist/Types.d.ts +80 -22
- package/dist/Types.d.ts.map +1 -1
- package/dist/Unify.d.ts +8 -2
- package/dist/Unify.d.ts.map +1 -1
- package/dist/Unify.js.map +1 -1
- package/dist/Utils.d.ts +137 -65
- package/dist/Utils.d.ts.map +1 -1
- package/dist/Utils.js +38 -66
- package/dist/Utils.js.map +1 -1
- package/dist/index.d.ts +886 -71
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +886 -71
- package/dist/index.js.map +1 -1
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +77 -71
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +502 -326
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/hashMap.js +7 -5
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/layer.js +3 -3
- package/dist/internal/layer.js.map +1 -1
- package/dist/internal/option.js +6 -0
- package/dist/internal/option.js.map +1 -1
- package/dist/internal/random.d.ts +2 -0
- package/dist/internal/random.d.ts.map +1 -0
- package/dist/internal/random.js +13 -0
- package/dist/internal/random.js.map +1 -0
- package/dist/internal/rcRef.js +9 -9
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/references.d.ts +2 -0
- package/dist/internal/references.d.ts.map +1 -0
- package/dist/internal/references.js +51 -0
- package/dist/internal/references.js.map +1 -0
- package/dist/internal/request.js +6 -6
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schedule.js +1 -1
- package/dist/internal/schedule.js.map +1 -1
- package/dist/internal/schema/annotations.js +2 -0
- package/dist/internal/schema/annotations.js.map +1 -1
- package/dist/internal/schema/representation.js +87 -109
- package/dist/internal/schema/representation.js.map +1 -1
- package/dist/internal/schema/schema.d.ts +10 -1
- package/dist/internal/schema/schema.d.ts.map +1 -1
- package/dist/internal/schema/schema.js +59 -1
- package/dist/internal/schema/schema.js.map +1 -1
- package/dist/internal/trie.js +8 -7
- package/dist/internal/trie.js.map +1 -1
- package/dist/testing/TestClock.d.ts +5 -5
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +2 -2
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +267 -33
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js +296 -23
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/testing/index.d.ts +64 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +64 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/unstable/ai/AiError.d.ts +127 -45
- package/dist/unstable/ai/AiError.d.ts.map +1 -1
- package/dist/unstable/ai/AiError.js +29 -23
- package/dist/unstable/ai/AiError.js.map +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.d.ts +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.d.ts.map +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.js +9 -2
- package/dist/unstable/ai/AnthropicStructuredOutput.js.map +1 -1
- package/dist/unstable/ai/Chat.d.ts +39 -11
- package/dist/unstable/ai/Chat.d.ts.map +1 -1
- package/dist/unstable/ai/Chat.js +40 -47
- package/dist/unstable/ai/Chat.js.map +1 -1
- package/dist/unstable/ai/EmbeddingModel.d.ts +130 -0
- package/dist/unstable/ai/EmbeddingModel.d.ts.map +1 -0
- package/dist/unstable/ai/EmbeddingModel.js +127 -0
- package/dist/unstable/ai/EmbeddingModel.js.map +1 -0
- package/dist/unstable/ai/IdGenerator.d.ts +2 -2
- package/dist/unstable/ai/IdGenerator.d.ts.map +1 -1
- package/dist/unstable/ai/IdGenerator.js +2 -2
- package/dist/unstable/ai/IdGenerator.js.map +1 -1
- package/dist/unstable/ai/LanguageModel.d.ts +119 -49
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/LanguageModel.js +260 -61
- package/dist/unstable/ai/LanguageModel.js.map +1 -1
- package/dist/unstable/ai/McpSchema.d.ts +207 -112
- package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
- package/dist/unstable/ai/McpSchema.js +71 -19
- package/dist/unstable/ai/McpSchema.js.map +1 -1
- package/dist/unstable/ai/McpServer.d.ts +68 -15
- package/dist/unstable/ai/McpServer.d.ts.map +1 -1
- package/dist/unstable/ai/McpServer.js +225 -73
- package/dist/unstable/ai/McpServer.js.map +1 -1
- package/dist/unstable/ai/Model.d.ts +27 -9
- package/dist/unstable/ai/Model.d.ts.map +1 -1
- package/dist/unstable/ai/Model.js +25 -9
- package/dist/unstable/ai/Model.js.map +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.d.ts +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.d.ts.map +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.js +9 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.js.map +1 -1
- package/dist/unstable/ai/Prompt.d.ts +17 -17
- package/dist/unstable/ai/Prompt.d.ts.map +1 -1
- package/dist/unstable/ai/Prompt.js +6 -9
- package/dist/unstable/ai/Prompt.js.map +1 -1
- package/dist/unstable/ai/Response.d.ts +24 -24
- package/dist/unstable/ai/Response.d.ts.map +1 -1
- package/dist/unstable/ai/Response.js +7 -8
- package/dist/unstable/ai/Response.js.map +1 -1
- package/dist/unstable/ai/ResponseIdTracker.d.ts +38 -0
- package/dist/unstable/ai/ResponseIdTracker.d.ts.map +1 -0
- package/dist/unstable/ai/ResponseIdTracker.js +68 -0
- package/dist/unstable/ai/ResponseIdTracker.js.map +1 -0
- package/dist/unstable/ai/Telemetry.d.ts +35 -2
- package/dist/unstable/ai/Telemetry.d.ts.map +1 -1
- package/dist/unstable/ai/Telemetry.js +2 -2
- package/dist/unstable/ai/Telemetry.js.map +1 -1
- package/dist/unstable/ai/Tokenizer.d.ts +2 -2
- package/dist/unstable/ai/Tokenizer.d.ts.map +1 -1
- package/dist/unstable/ai/Tokenizer.js +2 -2
- package/dist/unstable/ai/Tokenizer.js.map +1 -1
- package/dist/unstable/ai/Tool.d.ts +46 -16
- package/dist/unstable/ai/Tool.d.ts.map +1 -1
- package/dist/unstable/ai/Tool.js +68 -22
- package/dist/unstable/ai/Tool.js.map +1 -1
- package/dist/unstable/ai/Toolkit.d.ts +4 -4
- package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
- package/dist/unstable/ai/Toolkit.js +14 -21
- package/dist/unstable/ai/Toolkit.js.map +1 -1
- package/dist/unstable/ai/index.d.ts +22 -1
- package/dist/unstable/ai/index.d.ts.map +1 -1
- package/dist/unstable/ai/index.js +22 -1
- package/dist/unstable/ai/index.js.map +1 -1
- package/dist/unstable/ai/internal/codec-transformer.js +5 -7
- package/dist/unstable/ai/internal/codec-transformer.js.map +1 -1
- package/dist/unstable/cli/Argument.d.ts +4 -7
- package/dist/unstable/cli/Argument.d.ts.map +1 -1
- package/dist/unstable/cli/Argument.js +1 -3
- package/dist/unstable/cli/Argument.js.map +1 -1
- package/dist/unstable/cli/CliError.d.ts +51 -63
- package/dist/unstable/cli/CliError.d.ts.map +1 -1
- package/dist/unstable/cli/CliError.js +32 -57
- package/dist/unstable/cli/CliError.js.map +1 -1
- package/dist/unstable/cli/CliOutput.d.ts +5 -4
- package/dist/unstable/cli/CliOutput.d.ts.map +1 -1
- package/dist/unstable/cli/CliOutput.js +67 -12
- package/dist/unstable/cli/CliOutput.js.map +1 -1
- package/dist/unstable/cli/Command.d.ts +372 -59
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +328 -66
- package/dist/unstable/cli/Command.js.map +1 -1
- package/dist/unstable/cli/Completions.d.ts +97 -0
- package/dist/unstable/cli/Completions.d.ts.map +1 -0
- package/dist/unstable/cli/Completions.js +25 -0
- package/dist/unstable/cli/Completions.js.map +1 -0
- package/dist/unstable/cli/Flag.d.ts +4 -5
- package/dist/unstable/cli/Flag.d.ts.map +1 -1
- package/dist/unstable/cli/Flag.js +1 -1
- package/dist/unstable/cli/Flag.js.map +1 -1
- package/dist/unstable/cli/GlobalFlag.d.ts +125 -0
- package/dist/unstable/cli/GlobalFlag.d.ts.map +1 -0
- package/dist/unstable/cli/GlobalFlag.js +118 -0
- package/dist/unstable/cli/GlobalFlag.js.map +1 -0
- package/dist/unstable/cli/HelpDoc.d.ts +81 -11
- package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
- package/dist/unstable/cli/Param.d.ts +34 -6
- package/dist/unstable/cli/Param.d.ts.map +1 -1
- package/dist/unstable/cli/Param.js +24 -14
- package/dist/unstable/cli/Param.js.map +1 -1
- package/dist/unstable/cli/Primitive.d.ts +2 -2
- package/dist/unstable/cli/Primitive.d.ts.map +1 -1
- package/dist/unstable/cli/Primitive.js +1 -1
- package/dist/unstable/cli/Primitive.js.map +1 -1
- package/dist/unstable/cli/Prompt.js +266 -86
- package/dist/unstable/cli/Prompt.js.map +1 -1
- package/dist/unstable/cli/index.d.ts +10 -0
- package/dist/unstable/cli/index.d.ts.map +1 -1
- package/dist/unstable/cli/index.js +10 -0
- package/dist/unstable/cli/index.js.map +1 -1
- package/dist/unstable/cli/internal/command.d.ts +41 -15
- package/dist/unstable/cli/internal/command.d.ts.map +1 -1
- package/dist/unstable/cli/internal/command.js +84 -47
- package/dist/unstable/cli/internal/command.js.map +1 -1
- package/dist/unstable/cli/internal/completions/bash.js.map +1 -1
- package/dist/unstable/cli/internal/completions/descriptor.d.ts +2 -0
- package/dist/unstable/cli/internal/completions/descriptor.d.ts.map +1 -0
- package/dist/unstable/cli/internal/completions/{CommandDescriptor.js → descriptor.js} +17 -5
- package/dist/unstable/cli/internal/completions/descriptor.js.map +1 -0
- package/dist/unstable/cli/internal/completions/fish.js.map +1 -1
- package/dist/unstable/cli/internal/completions/zsh.js.map +1 -1
- package/dist/unstable/cli/internal/config.js +42 -0
- package/dist/unstable/cli/internal/config.js.map +1 -1
- package/dist/unstable/cli/internal/help.d.ts +33 -0
- package/dist/unstable/cli/internal/help.d.ts.map +1 -0
- package/dist/unstable/cli/internal/help.js +125 -0
- package/dist/unstable/cli/internal/help.js.map +1 -0
- package/dist/unstable/cli/internal/parser.js +155 -58
- package/dist/unstable/cli/internal/parser.js.map +1 -1
- package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
- package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterCron.js +1 -1
- package/dist/unstable/cluster/ClusterCron.js.map +1 -1
- package/dist/unstable/cluster/ClusterError.d.ts +7 -7
- package/dist/unstable/cluster/ClusterSchema.d.ts +28 -7
- package/dist/unstable/cluster/ClusterSchema.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterSchema.js +28 -8
- package/dist/unstable/cluster/ClusterSchema.js.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts +4 -2
- package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.js +96 -63
- package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/unstable/cluster/DeliverAt.js +1 -1
- package/dist/unstable/cluster/DeliverAt.js.map +1 -1
- package/dist/unstable/cluster/Entity.d.ts +17 -16
- package/dist/unstable/cluster/Entity.d.ts.map +1 -1
- package/dist/unstable/cluster/Entity.js +31 -25
- package/dist/unstable/cluster/Entity.js.map +1 -1
- package/dist/unstable/cluster/EntityAddress.d.ts +2 -2
- package/dist/unstable/cluster/EntityAddress.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityAddress.js +1 -1
- package/dist/unstable/cluster/EntityAddress.js.map +1 -1
- package/dist/unstable/cluster/EntityProxy.js +3 -3
- package/dist/unstable/cluster/EntityProxy.js.map +1 -1
- package/dist/unstable/cluster/EntityProxyServer.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityProxyServer.js +6 -6
- package/dist/unstable/cluster/EntityProxyServer.js.map +1 -1
- package/dist/unstable/cluster/EntityResource.d.ts +4 -4
- package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityResource.js +2 -2
- package/dist/unstable/cluster/EntityResource.js.map +1 -1
- package/dist/unstable/cluster/Envelope.d.ts +3 -3
- package/dist/unstable/cluster/HttpRunner.js +2 -2
- package/dist/unstable/cluster/HttpRunner.js.map +1 -1
- package/dist/unstable/cluster/K8sHttpClient.d.ts +5 -5
- package/dist/unstable/cluster/K8sHttpClient.d.ts.map +1 -1
- package/dist/unstable/cluster/K8sHttpClient.js +7 -7
- package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
- package/dist/unstable/cluster/Message.d.ts +16 -10
- package/dist/unstable/cluster/Message.d.ts.map +1 -1
- package/dist/unstable/cluster/Message.js +16 -8
- package/dist/unstable/cluster/Message.js.map +1 -1
- package/dist/unstable/cluster/MessageStorage.d.ts +46 -23
- package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/MessageStorage.js +40 -25
- package/dist/unstable/cluster/MessageStorage.js.map +1 -1
- package/dist/unstable/cluster/Reply.d.ts +7 -6
- package/dist/unstable/cluster/Reply.d.ts.map +1 -1
- package/dist/unstable/cluster/Reply.js +8 -7
- package/dist/unstable/cluster/Reply.js.map +1 -1
- package/dist/unstable/cluster/Runner.d.ts +1 -1
- package/dist/unstable/cluster/Runner.d.ts.map +1 -1
- package/dist/unstable/cluster/Runner.js +1 -1
- package/dist/unstable/cluster/Runner.js.map +1 -1
- package/dist/unstable/cluster/RunnerAddress.d.ts +1 -1
- package/dist/unstable/cluster/RunnerAddress.d.ts.map +1 -1
- package/dist/unstable/cluster/RunnerAddress.js +1 -1
- package/dist/unstable/cluster/RunnerAddress.js.map +1 -1
- package/dist/unstable/cluster/RunnerHealth.d.ts +2 -2
- package/dist/unstable/cluster/RunnerHealth.d.ts.map +1 -1
- package/dist/unstable/cluster/RunnerHealth.js +2 -2
- package/dist/unstable/cluster/RunnerHealth.js.map +1 -1
- package/dist/unstable/cluster/RunnerServer.d.ts.map +1 -1
- package/dist/unstable/cluster/RunnerServer.js +10 -9
- package/dist/unstable/cluster/RunnerServer.js.map +1 -1
- package/dist/unstable/cluster/RunnerStorage.d.ts +12 -12
- package/dist/unstable/cluster/RunnerStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/RunnerStorage.js +3 -3
- package/dist/unstable/cluster/RunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/Runners.d.ts +5 -4
- package/dist/unstable/cluster/Runners.d.ts.map +1 -1
- package/dist/unstable/cluster/Runners.js +16 -14
- package/dist/unstable/cluster/Runners.js.map +1 -1
- package/dist/unstable/cluster/ShardId.d.ts +35 -49
- package/dist/unstable/cluster/ShardId.d.ts.map +1 -1
- package/dist/unstable/cluster/ShardId.js +65 -67
- package/dist/unstable/cluster/ShardId.js.map +1 -1
- package/dist/unstable/cluster/Sharding.d.ts +4 -4
- package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
- package/dist/unstable/cluster/Sharding.js +59 -49
- package/dist/unstable/cluster/Sharding.js.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.d.ts +28 -27
- package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.js +27 -27
- package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
- package/dist/unstable/cluster/SingletonAddress.d.ts +2 -2
- package/dist/unstable/cluster/Snowflake.d.ts +2 -2
- package/dist/unstable/cluster/Snowflake.d.ts.map +1 -1
- package/dist/unstable/cluster/Snowflake.js +2 -2
- package/dist/unstable/cluster/Snowflake.js.map +1 -1
- package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/SqlMessageStorage.js +24 -20
- package/dist/unstable/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.js +7 -7
- package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/internal/entityManager.js +30 -24
- package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
- package/dist/unstable/cluster/internal/entityReaper.js +2 -2
- package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
- package/dist/unstable/cluster/internal/resourceMap.js +3 -3
- package/dist/unstable/cluster/internal/resourceMap.js.map +1 -1
- package/dist/unstable/devtools/DevToolsClient.d.ts +2 -2
- package/dist/unstable/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/unstable/devtools/DevToolsClient.js +9 -8
- package/dist/unstable/devtools/DevToolsClient.js.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.d.ts +4 -4
- package/dist/unstable/devtools/DevToolsSchema.d.ts.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.js +9 -2
- package/dist/unstable/devtools/DevToolsSchema.js.map +1 -1
- package/dist/unstable/encoding/Msgpack.d.ts +1 -1
- package/dist/unstable/encoding/Ndjson.d.ts +9 -9
- package/dist/unstable/encoding/Ndjson.d.ts.map +1 -1
- package/dist/unstable/encoding/Ndjson.js.map +1 -1
- package/dist/unstable/encoding/Sse.d.ts +3 -3
- package/dist/unstable/encoding/Sse.d.ts.map +1 -1
- package/dist/unstable/encoding/Sse.js +1 -1
- package/dist/unstable/encoding/Sse.js.map +1 -1
- package/dist/unstable/eventlog/Event.d.ts +0 -6
- package/dist/unstable/eventlog/Event.d.ts.map +1 -1
- package/dist/unstable/eventlog/Event.js +0 -5
- package/dist/unstable/eventlog/Event.js.map +1 -1
- package/dist/unstable/eventlog/EventGroup.d.ts +0 -2
- package/dist/unstable/eventlog/EventGroup.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventGroup.js +0 -2
- package/dist/unstable/eventlog/EventGroup.js.map +1 -1
- package/dist/unstable/eventlog/EventJournal.d.ts +27 -10
- package/dist/unstable/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventJournal.js +130 -71
- package/dist/unstable/eventlog/EventJournal.js.map +1 -1
- package/dist/unstable/eventlog/EventLog.d.ts +94 -37
- package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLog.js +225 -151
- package/dist/unstable/eventlog/EventLog.js.map +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.d.ts +11 -9
- package/dist/unstable/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.js +15 -17
- package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/unstable/eventlog/EventLogMessage.d.ts +228 -0
- package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -0
- package/dist/unstable/eventlog/EventLogMessage.js +214 -0
- package/dist/unstable/eventlog/EventLogMessage.js.map +1 -0
- package/dist/unstable/eventlog/EventLogRemote.d.ts +112 -194
- package/dist/unstable/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogRemote.js +168 -322
- package/dist/unstable/eventlog/EventLogRemote.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServer.d.ts +26 -48
- package/dist/unstable/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogServer.js +128 -199
- package/dist/unstable/eventlog/EventLogServer.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts +60 -0
- package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts.map +1 -0
- package/dist/unstable/eventlog/EventLogServerEncrypted.js +166 -0
- package/dist/unstable/eventlog/EventLogServerEncrypted.js.map +1 -0
- package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts +183 -0
- package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts.map +1 -0
- package/dist/unstable/eventlog/EventLogServerUnencrypted.js +461 -0
- package/dist/unstable/eventlog/EventLogServerUnencrypted.js.map +1 -0
- package/dist/unstable/eventlog/EventLogSessionAuth.d.ts +117 -0
- package/dist/unstable/eventlog/EventLogSessionAuth.d.ts.map +1 -0
- package/dist/unstable/eventlog/EventLogSessionAuth.js +284 -0
- package/dist/unstable/eventlog/EventLogSessionAuth.js.map +1 -0
- package/dist/unstable/eventlog/{SqlEventLogJournal.d.ts → SqlEventJournal.d.ts} +2 -2
- package/dist/unstable/eventlog/SqlEventJournal.d.ts.map +1 -0
- package/dist/unstable/eventlog/{SqlEventLogJournal.js → SqlEventJournal.js} +28 -21
- package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -0
- package/dist/unstable/eventlog/{SqlEventLogServer.d.ts → SqlEventLogServerEncrypted.d.ts} +5 -5
- package/dist/unstable/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -0
- package/dist/unstable/eventlog/{SqlEventLogServer.js → SqlEventLogServerEncrypted.js} +69 -27
- package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -0
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.d.ts +25 -0
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -0
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js +355 -0
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js.map +1 -0
- package/dist/unstable/eventlog/index.d.ts +22 -2
- package/dist/unstable/eventlog/index.d.ts.map +1 -1
- package/dist/unstable/eventlog/index.js +22 -2
- package/dist/unstable/eventlog/index.js.map +1 -1
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.d.ts +2 -0
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.d.ts.map +1 -0
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js +89 -0
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js.map +1 -0
- package/dist/unstable/http/Cookies.d.ts +51 -6
- package/dist/unstable/http/Cookies.d.ts.map +1 -1
- package/dist/unstable/http/Cookies.js +27 -6
- package/dist/unstable/http/Cookies.js.map +1 -1
- package/dist/unstable/http/Etag.d.ts +2 -2
- package/dist/unstable/http/Etag.d.ts.map +1 -1
- package/dist/unstable/http/Etag.js +7 -3
- package/dist/unstable/http/Etag.js.map +1 -1
- package/dist/unstable/http/FetchHttpClient.d.ts +6 -3
- package/dist/unstable/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/unstable/http/FetchHttpClient.js +5 -5
- package/dist/unstable/http/FetchHttpClient.js.map +1 -1
- package/dist/unstable/http/Headers.d.ts +24 -4
- package/dist/unstable/http/Headers.d.ts.map +1 -1
- package/dist/unstable/http/Headers.js +42 -13
- package/dist/unstable/http/Headers.js.map +1 -1
- package/dist/unstable/http/HttpBody.d.ts +1 -1
- package/dist/unstable/http/HttpClient.d.ts +125 -21
- package/dist/unstable/http/HttpClient.d.ts.map +1 -1
- package/dist/unstable/http/HttpClient.js +197 -19
- package/dist/unstable/http/HttpClient.js.map +1 -1
- package/dist/unstable/http/HttpClientError.d.ts +8 -8
- package/dist/unstable/http/HttpClientRequest.d.ts +43 -15
- package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientRequest.js +131 -21
- package/dist/unstable/http/HttpClientRequest.js.map +1 -1
- package/dist/unstable/http/HttpClientResponse.d.ts +2 -1
- package/dist/unstable/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientResponse.js +18 -3
- package/dist/unstable/http/HttpClientResponse.js.map +1 -1
- package/dist/unstable/http/HttpEffect.d.ts +13 -11
- package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
- package/dist/unstable/http/HttpEffect.js +51 -51
- package/dist/unstable/http/HttpEffect.js.map +1 -1
- package/dist/unstable/http/HttpIncomingMessage.d.ts +5 -4
- package/dist/unstable/http/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/unstable/http/HttpIncomingMessage.js +6 -10
- package/dist/unstable/http/HttpIncomingMessage.js.map +1 -1
- package/dist/unstable/http/HttpMethod.d.ts +4 -4
- package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
- package/dist/unstable/http/HttpMethod.js +3 -3
- package/dist/unstable/http/HttpMethod.js.map +1 -1
- package/dist/unstable/http/HttpMiddleware.d.ts +4 -9
- package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/unstable/http/HttpMiddleware.js +47 -43
- package/dist/unstable/http/HttpMiddleware.js.map +1 -1
- package/dist/unstable/http/HttpPlatform.d.ts +2 -2
- package/dist/unstable/http/HttpPlatform.d.ts.map +1 -1
- package/dist/unstable/http/HttpPlatform.js +5 -4
- package/dist/unstable/http/HttpPlatform.js.map +1 -1
- package/dist/unstable/http/HttpRouter.d.ts +9 -8
- package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
- package/dist/unstable/http/HttpRouter.js +36 -36
- package/dist/unstable/http/HttpRouter.js.map +1 -1
- package/dist/unstable/http/HttpServer.d.ts +2 -2
- package/dist/unstable/http/HttpServer.d.ts.map +1 -1
- package/dist/unstable/http/HttpServer.js +4 -4
- package/dist/unstable/http/HttpServer.js.map +1 -1
- package/dist/unstable/http/HttpServerError.d.ts +22 -34
- package/dist/unstable/http/HttpServerError.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerError.js +39 -45
- package/dist/unstable/http/HttpServerError.js.map +1 -1
- package/dist/unstable/http/HttpServerRequest.d.ts +19 -7
- package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerRequest.js +307 -13
- package/dist/unstable/http/HttpServerRequest.js.map +1 -1
- package/dist/unstable/http/HttpServerRespondable.d.ts +2 -2
- package/dist/unstable/http/HttpServerRespondable.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerRespondable.js +5 -5
- package/dist/unstable/http/HttpServerRespondable.js.map +1 -1
- package/dist/unstable/http/HttpServerResponse.d.ts +52 -5
- package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerResponse.js +240 -5
- package/dist/unstable/http/HttpServerResponse.js.map +1 -1
- package/dist/unstable/http/HttpStaticServer.d.ts +69 -0
- package/dist/unstable/http/HttpStaticServer.d.ts.map +1 -0
- package/dist/unstable/http/HttpStaticServer.js +353 -0
- package/dist/unstable/http/HttpStaticServer.js.map +1 -0
- package/dist/unstable/http/HttpTraceContext.d.ts +3 -2
- package/dist/unstable/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/unstable/http/HttpTraceContext.js +27 -15
- package/dist/unstable/http/HttpTraceContext.js.map +1 -1
- package/dist/unstable/http/Multipart.d.ts +7 -7
- package/dist/unstable/http/Multipart.d.ts.map +1 -1
- package/dist/unstable/http/Multipart.js +7 -7
- package/dist/unstable/http/Multipart.js.map +1 -1
- package/dist/unstable/http/Url.d.ts +604 -0
- package/dist/unstable/http/Url.d.ts.map +1 -0
- package/dist/unstable/http/Url.js +256 -0
- package/dist/unstable/http/Url.js.map +1 -0
- package/dist/unstable/http/UrlParams.d.ts +18 -9
- package/dist/unstable/http/UrlParams.d.ts.map +1 -1
- package/dist/unstable/http/UrlParams.js +6 -7
- package/dist/unstable/http/UrlParams.js.map +1 -1
- package/dist/unstable/http/index.d.ts +8 -0
- package/dist/unstable/http/index.d.ts.map +1 -1
- package/dist/unstable/http/index.js +8 -0
- package/dist/unstable/http/index.js.map +1 -1
- package/dist/unstable/http/internal/preResponseHandler.d.ts +2 -0
- package/dist/unstable/http/internal/preResponseHandler.d.ts.map +1 -0
- package/dist/unstable/http/internal/preResponseHandler.js +10 -0
- package/dist/unstable/http/internal/preResponseHandler.js.map +1 -0
- package/dist/unstable/httpapi/HttpApi.d.ts +11 -11
- package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApi.js +8 -8
- package/dist/unstable/httpapi/HttpApi.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts +12 -9
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.js +73 -48
- package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.d.ts +82 -7
- package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.js +79 -11
- package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +210 -105
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.js +52 -47
- package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.d.ts +66 -29
- package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.js +138 -32
- package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.d.ts +9 -8
- package/dist/unstable/httpapi/HttpApiGroup.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.js +4 -4
- package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +49 -17
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.js +38 -8
- package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSchema.d.ts +88 -9
- package/dist/unstable/httpapi/HttpApiSchema.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiSchema.js +86 -11
- package/dist/unstable/httpapi/HttpApiSchema.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSecurity.d.ts +9 -6
- package/dist/unstable/httpapi/HttpApiSecurity.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiSecurity.js +6 -6
- package/dist/unstable/httpapi/HttpApiSecurity.js.map +1 -1
- package/dist/unstable/httpapi/OpenApi.d.ts +17 -25
- package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/OpenApi.js +59 -60
- package/dist/unstable/httpapi/OpenApi.js.map +1 -1
- package/dist/unstable/observability/Otlp.d.ts +12 -12
- package/dist/unstable/observability/Otlp.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
- package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpExporter.js +8 -8
- package/dist/unstable/observability/OtlpExporter.js.map +1 -1
- package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
- package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpLogger.js +7 -4
- package/dist/unstable/observability/OtlpLogger.js.map +1 -1
- package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
- package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpMetrics.js +2 -2
- package/dist/unstable/observability/OtlpMetrics.js.map +1 -1
- package/dist/unstable/observability/OtlpSerialization.d.ts +2 -2
- package/dist/unstable/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpSerialization.js +2 -2
- package/dist/unstable/observability/OtlpSerialization.js.map +1 -1
- package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
- package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpTracer.js +7 -3
- package/dist/unstable/observability/OtlpTracer.js.map +1 -1
- package/dist/unstable/observability/PrometheusMetrics.d.ts +3 -3
- package/dist/unstable/observability/PrometheusMetrics.d.ts.map +1 -1
- package/dist/unstable/observability/PrometheusMetrics.js +4 -33
- package/dist/unstable/observability/PrometheusMetrics.js.map +1 -1
- package/dist/unstable/observability/internal/protobuf.js +4 -4
- package/dist/unstable/observability/internal/protobuf.js.map +1 -1
- package/dist/unstable/persistence/KeyValueStore.d.ts +24 -3
- package/dist/unstable/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/unstable/persistence/KeyValueStore.js +144 -2
- package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
- package/dist/unstable/persistence/Persistable.d.ts +2 -2
- package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
- package/dist/unstable/persistence/Persistable.js +1 -1
- package/dist/unstable/persistence/Persistable.js.map +1 -1
- package/dist/unstable/persistence/PersistedCache.d.ts +1 -2
- package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedCache.js +10 -11
- package/dist/unstable/persistence/PersistedCache.js.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.d.ts +16 -16
- package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.js +9 -9
- package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
- package/dist/unstable/persistence/Persistence.d.ts +5 -5
- package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
- package/dist/unstable/persistence/Persistence.js +5 -5
- package/dist/unstable/persistence/Persistence.js.map +1 -1
- package/dist/unstable/persistence/RateLimiter.d.ts +9 -9
- package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/unstable/persistence/RateLimiter.js +4 -4
- package/dist/unstable/persistence/RateLimiter.js.map +1 -1
- package/dist/unstable/persistence/Redis.d.ts +3 -3
- package/dist/unstable/persistence/Redis.d.ts.map +1 -1
- package/dist/unstable/persistence/Redis.js +2 -2
- package/dist/unstable/persistence/Redis.js.map +1 -1
- package/dist/unstable/process/ChildProcess.d.ts +5 -128
- package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcess.js +1 -65
- package/dist/unstable/process/ChildProcess.js.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.d.ts +83 -8
- package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.js +22 -2
- package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
- package/dist/unstable/reactivity/AsyncResult.d.ts +37 -17
- package/dist/unstable/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/unstable/reactivity/AsyncResult.js +9 -0
- package/dist/unstable/reactivity/AsyncResult.js.map +1 -1
- package/dist/unstable/reactivity/Atom.d.ts +108 -47
- package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +105 -25
- package/dist/unstable/reactivity/Atom.js.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts +25 -20
- package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.js +58 -26
- package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/unstable/reactivity/AtomRegistry.d.ts +8 -2
- package/dist/unstable/reactivity/AtomRegistry.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRegistry.js +57 -14
- package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts +12 -12
- package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.js +59 -31
- package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
- package/dist/unstable/reactivity/Reactivity.d.ts +2 -2
- package/dist/unstable/reactivity/Reactivity.d.ts.map +1 -1
- package/dist/unstable/reactivity/Reactivity.js +6 -6
- package/dist/unstable/reactivity/Reactivity.js.map +1 -1
- package/dist/unstable/rpc/Rpc.d.ts +137 -19
- package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
- package/dist/unstable/rpc/Rpc.js +99 -7
- package/dist/unstable/rpc/Rpc.js.map +1 -1
- package/dist/unstable/rpc/RpcClient.d.ts +26 -47
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +117 -75
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- package/dist/unstable/rpc/RpcClientError.d.ts +2 -2
- package/dist/unstable/rpc/RpcGroup.d.ts +15 -11
- package/dist/unstable/rpc/RpcGroup.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcGroup.js +30 -20
- package/dist/unstable/rpc/RpcGroup.js.map +1 -1
- package/dist/unstable/rpc/RpcMiddleware.d.ts +12 -12
- package/dist/unstable/rpc/RpcMiddleware.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcMiddleware.js +5 -5
- package/dist/unstable/rpc/RpcMiddleware.js.map +1 -1
- package/dist/unstable/rpc/RpcSchema.d.ts +14 -1
- package/dist/unstable/rpc/RpcSchema.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcSchema.js +17 -2
- package/dist/unstable/rpc/RpcSchema.js.map +1 -1
- package/dist/unstable/rpc/RpcSerialization.d.ts +13 -2
- package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcSerialization.js +60 -27
- package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts +8 -12
- package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +73 -43
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/dist/unstable/rpc/RpcWorker.d.ts +2 -2
- package/dist/unstable/rpc/RpcWorker.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcWorker.js +4 -4
- package/dist/unstable/rpc/RpcWorker.js.map +1 -1
- package/dist/unstable/rpc/Utils.d.ts +6 -3
- package/dist/unstable/rpc/Utils.d.ts.map +1 -1
- package/dist/unstable/rpc/Utils.js +46 -5
- package/dist/unstable/rpc/Utils.js.map +1 -1
- package/dist/unstable/schema/Model.d.ts +24 -3
- package/dist/unstable/schema/Model.d.ts.map +1 -1
- package/dist/unstable/schema/Model.js +17 -4
- package/dist/unstable/schema/Model.js.map +1 -1
- package/dist/unstable/schema/VariantSchema.d.ts +7 -7
- package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
- package/dist/unstable/schema/VariantSchema.js +7 -18
- package/dist/unstable/schema/VariantSchema.js.map +1 -1
- package/dist/unstable/socket/Socket.d.ts +35 -15
- package/dist/unstable/socket/Socket.d.ts.map +1 -1
- package/dist/unstable/socket/Socket.js +34 -27
- package/dist/unstable/socket/Socket.js.map +1 -1
- package/dist/unstable/socket/SocketServer.d.ts +8 -5
- package/dist/unstable/socket/SocketServer.d.ts.map +1 -1
- package/dist/unstable/socket/SocketServer.js +2 -2
- package/dist/unstable/socket/SocketServer.js.map +1 -1
- package/dist/unstable/sql/Migrator.d.ts +1 -1
- package/dist/unstable/sql/Migrator.d.ts.map +1 -1
- package/dist/unstable/sql/Migrator.js +2 -2
- package/dist/unstable/sql/Migrator.js.map +1 -1
- package/dist/unstable/sql/SqlClient.d.ts +24 -6
- package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
- package/dist/unstable/sql/SqlClient.js +37 -32
- package/dist/unstable/sql/SqlClient.js.map +1 -1
- package/dist/unstable/sql/SqlConnection.d.ts +2 -2
- package/dist/unstable/sql/SqlConnection.d.ts.map +1 -1
- package/dist/unstable/sql/SqlConnection.js +5 -2
- package/dist/unstable/sql/SqlConnection.js.map +1 -1
- package/dist/unstable/sql/SqlError.d.ts +237 -17
- package/dist/unstable/sql/SqlError.d.ts.map +1 -1
- package/dist/unstable/sql/SqlError.js +260 -4
- package/dist/unstable/sql/SqlError.js.map +1 -1
- package/dist/unstable/sql/SqlModel.d.ts +8 -9
- package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
- package/dist/unstable/sql/SqlModel.js +12 -38
- package/dist/unstable/sql/SqlModel.js.map +1 -1
- package/dist/unstable/sql/SqlResolver.js +24 -17
- package/dist/unstable/sql/SqlResolver.js.map +1 -1
- package/dist/unstable/sql/SqlSchema.d.ts +17 -6
- package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
- package/dist/unstable/sql/SqlSchema.js +17 -7
- package/dist/unstable/sql/SqlSchema.js.map +1 -1
- package/dist/unstable/sql/Statement.d.ts +3 -5
- package/dist/unstable/sql/Statement.d.ts.map +1 -1
- package/dist/unstable/sql/Statement.js +14 -13
- package/dist/unstable/sql/Statement.js.map +1 -1
- package/dist/unstable/workers/Transferable.d.ts +4 -4
- package/dist/unstable/workers/Transferable.d.ts.map +1 -1
- package/dist/unstable/workers/Transferable.js +7 -7
- package/dist/unstable/workers/Transferable.js.map +1 -1
- package/dist/unstable/workers/Worker.d.ts +3 -3
- package/dist/unstable/workers/Worker.d.ts.map +1 -1
- package/dist/unstable/workers/Worker.js +6 -3
- package/dist/unstable/workers/Worker.js.map +1 -1
- package/dist/unstable/workers/WorkerError.d.ts +5 -5
- package/dist/unstable/workers/WorkerRunner.d.ts +2 -2
- package/dist/unstable/workers/WorkerRunner.d.ts.map +1 -1
- package/dist/unstable/workers/WorkerRunner.js +5 -2
- package/dist/unstable/workers/WorkerRunner.js.map +1 -1
- package/dist/unstable/workflow/Activity.d.ts +8 -3
- package/dist/unstable/workflow/Activity.d.ts.map +1 -1
- package/dist/unstable/workflow/Activity.js +25 -11
- package/dist/unstable/workflow/Activity.js.map +1 -1
- package/dist/unstable/workflow/DurableClock.d.ts +3 -6
- package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
- package/dist/unstable/workflow/DurableClock.js +6 -6
- package/dist/unstable/workflow/DurableClock.js.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.d.ts +2 -5
- package/dist/unstable/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.js +33 -15
- package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
- package/dist/unstable/workflow/Workflow.d.ts +12 -14
- package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
- package/dist/unstable/workflow/Workflow.js +30 -26
- package/dist/unstable/workflow/Workflow.js.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.d.ts +24 -7
- package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.js +165 -16
- package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
- package/dist/unstable/workflow/WorkflowProxyServer.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowProxyServer.js +4 -4
- package/dist/unstable/workflow/WorkflowProxyServer.js.map +1 -1
- package/package.json +11 -10
- package/src/Array.ts +304 -447
- package/src/BigDecimal.ts +137 -82
- package/src/BigInt.ts +53 -45
- package/src/Brand.ts +3 -5
- package/src/Cache.ts +27 -54
- package/src/Cause.ts +57 -22
- package/src/Channel.ts +687 -220
- package/src/Chunk.ts +149 -331
- package/src/Clock.ts +2 -2
- package/src/Combiner.ts +280 -13
- package/src/Config.ts +214 -52
- package/src/ConfigProvider.ts +5 -5
- package/src/Console.ts +2 -2
- package/src/Context.ts +1454 -0
- package/src/Cron.ts +155 -63
- package/src/Data.ts +530 -368
- package/src/DateTime.ts +77 -258
- package/src/Deferred.ts +15 -6
- package/src/Duration.ts +151 -81
- package/src/Effect.ts +1633 -1055
- package/src/Effectable.ts +47 -0
- package/src/Equal.ts +293 -109
- package/src/Equivalence.ts +114 -52
- package/src/ErrorReporter.ts +458 -0
- package/src/ExecutionPlan.ts +8 -9
- package/src/Exit.ts +24 -12
- package/src/Fiber.ts +17 -8
- package/src/FiberHandle.ts +15 -14
- package/src/FiberMap.ts +27 -27
- package/src/FiberSet.ts +5 -5
- package/src/FileSystem.ts +30 -26
- package/src/Filter.ts +4 -62
- package/src/Formatter.ts +268 -60
- package/src/Function.ts +2 -10
- package/src/Graph.ts +123 -112
- package/src/Hash.ts +2 -2
- package/src/HashMap.ts +26 -19
- package/src/Inspectable.ts +2 -22
- package/src/Iterable.ts +117 -63
- package/src/JsonSchema.ts +383 -10
- package/src/Latch.ts +85 -3
- package/src/Layer.ts +728 -441
- package/src/LayerMap.ts +38 -35
- package/src/LogLevel.ts +37 -0
- package/src/Logger.ts +35 -102
- package/src/ManagedRuntime.ts +61 -48
- package/src/Metric.ts +64 -66
- package/src/MutableHashMap.ts +9 -0
- package/src/MutableHashSet.ts +9 -0
- package/src/MutableList.ts +3 -0
- package/src/Newtype.ts +308 -0
- package/src/Number.ts +98 -29
- package/src/Optic.ts +948 -19
- package/src/Option.ts +34 -24
- package/src/Order.ts +39 -32
- package/src/PartitionedSemaphore.ts +414 -0
- package/src/Path.ts +2 -2
- package/src/Pool.ts +9 -9
- package/src/Predicate.ts +1 -1
- package/src/PubSub.ts +20 -11
- package/src/Pull.ts +1 -1
- package/src/Queue.ts +11 -9
- package/src/Random.ts +51 -14
- package/src/RcMap.ts +19 -19
- package/src/RcRef.ts +1 -1
- package/src/Record.ts +94 -199
- package/src/Redactable.ts +146 -72
- package/src/Reducer.ts +166 -7
- package/src/References.ts +283 -287
- package/src/Request.ts +5 -5
- package/src/RequestResolver.ts +34 -35
- package/src/Resource.ts +6 -5
- package/src/Result.ts +2 -4
- package/src/Runtime.ts +102 -6
- package/src/Schedule.ts +243 -336
- package/src/Scheduler.ts +52 -129
- package/src/Schema.ts +3769 -597
- package/src/SchemaAST.ts +480 -302
- package/src/SchemaGetter.ts +80 -24
- package/src/SchemaIssue.ts +28 -15
- package/src/SchemaParser.ts +100 -29
- package/src/SchemaRepresentation.ts +57 -33
- package/src/SchemaTransformation.ts +321 -32
- package/src/Scope.ts +2 -2
- package/src/ScopedCache.ts +8 -8
- package/src/Semaphore.ts +268 -182
- package/src/Sink.ts +89 -34
- package/src/Stdio.ts +29 -6
- package/src/Stream.ts +908 -752
- package/src/String.ts +122 -69
- package/src/Struct.ts +7 -7
- package/src/SubscriptionRef.ts +98 -118
- package/src/Terminal.ts +5 -4
- package/src/Tracer.ts +23 -22
- package/src/Trie.ts +44 -31
- package/src/TxChunk.ts +26 -16
- package/src/TxDeferred.ts +391 -0
- package/src/TxHashMap.ts +347 -291
- package/src/TxHashSet.ts +54 -61
- package/src/TxPriorityQueue.ts +762 -0
- package/src/TxPubSub.ts +787 -0
- package/src/TxQueue.ts +221 -245
- package/src/TxReentrantLock.ts +729 -0
- package/src/TxRef.ts +31 -31
- package/src/TxSemaphore.ts +203 -31
- package/src/TxSubscriptionRef.ts +637 -0
- package/src/Types.ts +75 -23
- package/src/Unify.ts +26 -2
- package/src/Utils.ts +137 -111
- package/src/index.ts +896 -73
- package/src/internal/core.ts +9 -10
- package/src/internal/dateTime.ts +91 -96
- package/src/internal/effect.ts +1179 -614
- package/src/internal/hashMap.ts +12 -10
- package/src/internal/layer.ts +7 -7
- package/src/internal/option.ts +7 -0
- package/src/internal/random.ts +20 -0
- package/src/internal/rcRef.ts +12 -12
- package/src/internal/references.ts +72 -0
- package/src/internal/request.ts +8 -8
- package/src/internal/schedule.ts +3 -1
- package/src/internal/schema/annotations.ts +2 -0
- package/src/internal/schema/representation.ts +82 -97
- package/src/internal/schema/schema.ts +68 -1
- package/src/internal/trie.ts +21 -15
- package/src/testing/TestClock.ts +6 -6
- package/src/testing/TestSchema.ts +333 -36
- package/src/testing/index.ts +64 -1
- package/src/unstable/ai/AiError.ts +111 -53
- package/src/unstable/ai/AnthropicStructuredOutput.ts +7 -3
- package/src/unstable/ai/Chat.ts +136 -88
- package/src/unstable/ai/EmbeddingModel.ts +209 -0
- package/src/unstable/ai/IdGenerator.ts +2 -2
- package/src/unstable/ai/LanguageModel.ts +685 -255
- package/src/unstable/ai/McpSchema.ts +84 -22
- package/src/unstable/ai/McpServer.ts +307 -87
- package/src/unstable/ai/Model.ts +44 -13
- package/src/unstable/ai/OpenAiStructuredOutput.ts +9 -2
- package/src/unstable/ai/Prompt.ts +23 -29
- package/src/unstable/ai/Response.ts +29 -31
- package/src/unstable/ai/ResponseIdTracker.ts +95 -0
- package/src/unstable/ai/Telemetry.ts +2 -2
- package/src/unstable/ai/Tokenizer.ts +2 -2
- package/src/unstable/ai/Tool.ts +62 -36
- package/src/unstable/ai/Toolkit.ts +17 -26
- package/src/unstable/ai/index.ts +24 -1
- package/src/unstable/ai/internal/codec-transformer.ts +3 -9
- package/src/unstable/cli/Argument.ts +5 -8
- package/src/unstable/cli/CliError.ts +67 -66
- package/src/unstable/cli/CliOutput.ts +87 -15
- package/src/unstable/cli/Command.ts +808 -193
- package/src/unstable/cli/Completions.ts +107 -0
- package/src/unstable/cli/Flag.ts +5 -6
- package/src/unstable/cli/GlobalFlag.ts +242 -0
- package/src/unstable/cli/HelpDoc.ts +91 -11
- package/src/unstable/cli/Param.ts +54 -27
- package/src/unstable/cli/Primitive.ts +2 -2
- package/src/unstable/cli/Prompt.ts +275 -104
- package/src/unstable/cli/index.ts +12 -0
- package/src/unstable/cli/internal/command.ts +125 -64
- package/src/unstable/cli/internal/completions/bash.ts +7 -7
- package/src/unstable/cli/internal/completions/{CommandDescriptor.ts → descriptor.ts} +16 -58
- package/src/unstable/cli/internal/completions/fish.ts +7 -7
- package/src/unstable/cli/internal/completions/zsh.ts +8 -14
- package/src/unstable/cli/internal/config.ts +49 -0
- package/src/unstable/cli/internal/help.ts +171 -0
- package/src/unstable/cli/internal/parser.ts +201 -84
- package/src/unstable/cluster/ClusterCron.ts +2 -2
- package/src/unstable/cluster/ClusterSchema.ts +38 -10
- package/src/unstable/cluster/ClusterWorkflowEngine.ts +142 -80
- package/src/unstable/cluster/DeliverAt.ts +1 -1
- package/src/unstable/cluster/Entity.ts +58 -45
- package/src/unstable/cluster/EntityAddress.ts +1 -1
- package/src/unstable/cluster/EntityProxy.ts +3 -3
- package/src/unstable/cluster/EntityProxyServer.ts +6 -6
- package/src/unstable/cluster/EntityResource.ts +6 -6
- package/src/unstable/cluster/HttpRunner.ts +2 -2
- package/src/unstable/cluster/K8sHttpClient.ts +10 -10
- package/src/unstable/cluster/Message.ts +30 -17
- package/src/unstable/cluster/MessageStorage.ts +74 -45
- package/src/unstable/cluster/Reply.ts +13 -10
- package/src/unstable/cluster/Runner.ts +1 -1
- package/src/unstable/cluster/RunnerAddress.ts +1 -1
- package/src/unstable/cluster/RunnerHealth.ts +2 -2
- package/src/unstable/cluster/RunnerServer.ts +11 -14
- package/src/unstable/cluster/RunnerStorage.ts +9 -9
- package/src/unstable/cluster/Runners.ts +22 -18
- package/src/unstable/cluster/ShardId.ts +84 -74
- package/src/unstable/cluster/Sharding.ts +75 -60
- package/src/unstable/cluster/ShardingConfig.ts +39 -40
- package/src/unstable/cluster/Snowflake.ts +2 -2
- package/src/unstable/cluster/SqlMessageStorage.ts +29 -20
- package/src/unstable/cluster/SqlRunnerStorage.ts +13 -7
- package/src/unstable/cluster/internal/entityManager.ts +60 -41
- package/src/unstable/cluster/internal/entityReaper.ts +2 -2
- package/src/unstable/cluster/internal/resourceMap.ts +3 -3
- package/src/unstable/devtools/DevToolsClient.ts +26 -21
- package/src/unstable/devtools/DevToolsSchema.ts +16 -3
- package/src/unstable/encoding/Ndjson.ts +17 -17
- package/src/unstable/encoding/Sse.ts +3 -5
- package/src/unstable/eventlog/Event.ts +0 -8
- package/src/unstable/eventlog/EventGroup.ts +0 -4
- package/src/unstable/eventlog/EventJournal.ts +148 -80
- package/src/unstable/eventlog/EventLog.ts +360 -234
- package/src/unstable/eventlog/EventLogEncryption.ts +18 -32
- package/src/unstable/eventlog/EventLogMessage.ts +277 -0
- package/src/unstable/eventlog/EventLogRemote.ts +264 -410
- package/src/unstable/eventlog/EventLogServer.ts +183 -275
- package/src/unstable/eventlog/EventLogServerEncrypted.ts +206 -0
- package/src/unstable/eventlog/EventLogServerUnencrypted.ts +749 -0
- package/src/unstable/eventlog/EventLogSessionAuth.ts +437 -0
- package/src/unstable/eventlog/{SqlEventLogJournal.ts → SqlEventJournal.ts} +38 -22
- package/src/unstable/eventlog/{SqlEventLogServer.ts → SqlEventLogServerEncrypted.ts} +110 -43
- package/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +506 -0
- package/src/unstable/eventlog/index.ts +27 -2
- package/src/unstable/eventlog/internal/identityRootSecretDerivation.ts +153 -0
- package/src/unstable/http/Cookies.ts +94 -11
- package/src/unstable/http/Etag.ts +7 -5
- package/src/unstable/http/FetchHttpClient.ts +5 -5
- package/src/unstable/http/Headers.ts +70 -20
- package/src/unstable/http/HttpClient.ts +385 -42
- package/src/unstable/http/HttpClientRequest.ts +151 -39
- package/src/unstable/http/HttpClientResponse.ts +24 -8
- package/src/unstable/http/HttpEffect.ts +71 -77
- package/src/unstable/http/HttpIncomingMessage.ts +9 -8
- package/src/unstable/http/HttpMethod.ts +16 -4
- package/src/unstable/http/HttpMiddleware.ts +50 -50
- package/src/unstable/http/HttpPlatform.ts +5 -4
- package/src/unstable/http/HttpRouter.ts +46 -46
- package/src/unstable/http/HttpServer.ts +5 -11
- package/src/unstable/http/HttpServerError.ts +45 -47
- package/src/unstable/http/HttpServerRequest.ts +414 -23
- package/src/unstable/http/HttpServerRespondable.ts +6 -6
- package/src/unstable/http/HttpServerResponse.ts +351 -13
- package/src/unstable/http/HttpStaticServer.ts +456 -0
- package/src/unstable/http/HttpTraceContext.ts +31 -17
- package/src/unstable/http/Multipart.ts +8 -8
- package/src/unstable/http/Url.ts +650 -0
- package/src/unstable/http/UrlParams.ts +30 -18
- package/src/unstable/http/index.ts +10 -0
- package/src/unstable/http/internal/preResponseHandler.ts +15 -0
- package/src/unstable/httpapi/HttpApi.ts +22 -22
- package/src/unstable/httpapi/HttpApiBuilder.ts +156 -66
- package/src/unstable/httpapi/HttpApiClient.ts +185 -34
- package/src/unstable/httpapi/HttpApiEndpoint.ts +225 -114
- package/src/unstable/httpapi/HttpApiError.ts +129 -30
- package/src/unstable/httpapi/HttpApiGroup.ts +18 -17
- package/src/unstable/httpapi/HttpApiMiddleware.ts +95 -32
- package/src/unstable/httpapi/HttpApiSchema.ts +106 -11
- package/src/unstable/httpapi/HttpApiSecurity.ts +13 -13
- package/src/unstable/httpapi/OpenApi.ts +74 -73
- package/src/unstable/observability/Otlp.ts +12 -12
- package/src/unstable/observability/OtlpExporter.ts +14 -10
- package/src/unstable/observability/OtlpLogger.ts +13 -9
- package/src/unstable/observability/OtlpMetrics.ts +6 -6
- package/src/unstable/observability/OtlpSerialization.ts +2 -2
- package/src/unstable/observability/OtlpTracer.ts +14 -10
- package/src/unstable/observability/PrometheusMetrics.ts +5 -5
- package/src/unstable/observability/internal/protobuf.ts +4 -4
- package/src/unstable/persistence/KeyValueStore.ts +226 -3
- package/src/unstable/persistence/Persistable.ts +3 -3
- package/src/unstable/persistence/PersistedCache.ts +20 -17
- package/src/unstable/persistence/PersistedQueue.ts +21 -21
- package/src/unstable/persistence/Persistence.ts +7 -7
- package/src/unstable/persistence/RateLimiter.ts +7 -7
- package/src/unstable/persistence/Redis.ts +2 -2
- package/src/unstable/process/ChildProcess.ts +6 -208
- package/src/unstable/process/ChildProcessSpawner.ts +114 -15
- package/src/unstable/reactivity/AsyncResult.ts +59 -17
- package/src/unstable/reactivity/Atom.ts +280 -124
- package/src/unstable/reactivity/AtomHttpApi.ts +127 -61
- package/src/unstable/reactivity/AtomRegistry.ts +70 -16
- package/src/unstable/reactivity/AtomRpc.ts +82 -37
- package/src/unstable/reactivity/Reactivity.ts +6 -6
- package/src/unstable/rpc/Rpc.ts +212 -32
- package/src/unstable/rpc/RpcClient.ts +161 -142
- package/src/unstable/rpc/RpcGroup.ts +51 -34
- package/src/unstable/rpc/RpcMiddleware.ts +28 -22
- package/src/unstable/rpc/RpcSchema.ts +24 -6
- package/src/unstable/rpc/RpcSerialization.ts +97 -54
- package/src/unstable/rpc/RpcServer.ts +91 -65
- package/src/unstable/rpc/RpcWorker.ts +5 -5
- package/src/unstable/rpc/Utils.ts +63 -4
- package/src/unstable/schema/Model.ts +35 -6
- package/src/unstable/schema/VariantSchema.ts +14 -27
- package/src/unstable/socket/Socket.ts +102 -62
- package/src/unstable/socket/SocketServer.ts +2 -2
- package/src/unstable/sql/Migrator.ts +7 -5
- package/src/unstable/sql/SqlClient.ts +48 -19
- package/src/unstable/sql/SqlConnection.ts +2 -2
- package/src/unstable/sql/SqlError.ts +365 -11
- package/src/unstable/sql/SqlModel.ts +57 -85
- package/src/unstable/sql/SqlResolver.ts +28 -20
- package/src/unstable/sql/SqlSchema.ts +42 -26
- package/src/unstable/sql/Statement.ts +21 -25
- package/src/unstable/workers/Transferable.ts +17 -19
- package/src/unstable/workers/Worker.ts +4 -4
- package/src/unstable/workers/WorkerRunner.ts +2 -2
- package/src/unstable/workflow/Activity.ts +36 -13
- package/src/unstable/workflow/DurableClock.ts +11 -11
- package/src/unstable/workflow/DurableDeferred.ts +36 -18
- package/src/unstable/workflow/Workflow.ts +46 -35
- package/src/unstable/workflow/WorkflowEngine.ts +236 -23
- package/src/unstable/workflow/WorkflowProxyServer.ts +4 -4
- package/dist/NullOr.d.ts +0 -149
- package/dist/NullOr.d.ts.map +0 -1
- package/dist/NullOr.js +0 -152
- package/dist/NullOr.js.map +0 -1
- package/dist/ServiceMap.d.ts +0 -1126
- package/dist/ServiceMap.d.ts.map +0 -1
- package/dist/ServiceMap.js.map +0 -1
- package/dist/internal/schema/to-codec.d.ts +0 -2
- package/dist/internal/schema/to-codec.d.ts.map +0 -1
- package/dist/internal/schema/to-codec.js +0 -129
- package/dist/internal/schema/to-codec.js.map +0 -1
- package/dist/unstable/cli/internal/builtInFlags.d.ts +0 -7
- package/dist/unstable/cli/internal/builtInFlags.d.ts.map +0 -1
- package/dist/unstable/cli/internal/builtInFlags.js +0 -44
- package/dist/unstable/cli/internal/builtInFlags.js.map +0 -1
- package/dist/unstable/cli/internal/completions/CommandDescriptor.d.ts +0 -2
- package/dist/unstable/cli/internal/completions/CommandDescriptor.d.ts.map +0 -1
- package/dist/unstable/cli/internal/completions/CommandDescriptor.js.map +0 -1
- package/dist/unstable/cli/internal/completions/Completions.d.ts +0 -2
- package/dist/unstable/cli/internal/completions/Completions.d.ts.map +0 -1
- package/dist/unstable/cli/internal/completions/Completions.js +0 -23
- package/dist/unstable/cli/internal/completions/Completions.js.map +0 -1
- package/dist/unstable/eventlog/SqlEventLogJournal.d.ts.map +0 -1
- package/dist/unstable/eventlog/SqlEventLogJournal.js.map +0 -1
- package/dist/unstable/eventlog/SqlEventLogServer.d.ts.map +0 -1
- package/dist/unstable/eventlog/SqlEventLogServer.js.map +0 -1
- package/src/NullOr.ts +0 -204
- package/src/ServiceMap.ts +0 -1410
- package/src/internal/schema/to-codec.ts +0 -148
- package/src/unstable/cli/internal/builtInFlags.ts +0 -78
- package/src/unstable/cli/internal/completions/Completions.ts +0 -31
package/src/Layer.ts
CHANGED
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import type { NonEmptyArray, NonEmptyReadonlyArray } from "./Array.ts"
|
|
21
21
|
import type * as Cause from "./Cause.ts"
|
|
22
|
+
import type * as Channel from "./Channel.ts"
|
|
23
|
+
import * as Context from "./Context.ts"
|
|
22
24
|
import * as Deferred from "./Deferred.ts"
|
|
23
25
|
import type { Effect } from "./Effect.ts"
|
|
24
26
|
import type * as Exit from "./Exit.ts"
|
|
@@ -32,9 +34,10 @@ import { type Pipeable, pipeArguments } from "./Pipeable.ts"
|
|
|
32
34
|
import { hasProperty } from "./Predicate.ts"
|
|
33
35
|
import { CurrentStackFrame } from "./References.ts"
|
|
34
36
|
import * as Scope from "./Scope.ts"
|
|
35
|
-
import * as
|
|
37
|
+
import type * as Stream from "./Stream.ts"
|
|
36
38
|
import * as Tracer from "./Tracer.ts"
|
|
37
39
|
import type * as Types from "./Types.ts"
|
|
40
|
+
import type * as Unify from "./Unify.ts"
|
|
38
41
|
|
|
39
42
|
const TypeId = "~effect/Layer"
|
|
40
43
|
|
|
@@ -51,9 +54,31 @@ const TypeId = "~effect/Layer"
|
|
|
51
54
|
*/
|
|
52
55
|
export interface Layer<in ROut, out E = never, out RIn = never> extends Variance<ROut, E, RIn>, Pipeable {
|
|
53
56
|
/** @internal */
|
|
54
|
-
build(memoMap: MemoMap, scope: Scope.Scope): Effect<
|
|
57
|
+
build(memoMap: MemoMap, scope: Scope.Scope): Effect<Context.Context<ROut>, E, RIn>
|
|
58
|
+
[Unify.typeSymbol]?: unknown
|
|
59
|
+
[Unify.unifySymbol]?: LayerUnify<this>
|
|
60
|
+
[Unify.ignoreSymbol]?: LayerUnifyIgnore
|
|
55
61
|
}
|
|
56
62
|
|
|
63
|
+
/**
|
|
64
|
+
* @since 4.0.0
|
|
65
|
+
* @category models
|
|
66
|
+
*/
|
|
67
|
+
export interface LayerUnify<A extends { [Unify.typeSymbol]?: any }> {
|
|
68
|
+
Layer?: () => A[Unify.typeSymbol] extends Layer<any, any, any> | infer _ ? Layer<
|
|
69
|
+
Success<Extract<A[Unify.typeSymbol], Any>>,
|
|
70
|
+
Error<Extract<A[Unify.typeSymbol], Any>>,
|
|
71
|
+
Services<Extract<A[Unify.typeSymbol], Any>>
|
|
72
|
+
>
|
|
73
|
+
: never
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @since 4.0.0
|
|
78
|
+
* @category models
|
|
79
|
+
*/
|
|
80
|
+
export interface LayerUnifyIgnore {}
|
|
81
|
+
|
|
57
82
|
/**
|
|
58
83
|
* The variance interface for Layer type parameters.
|
|
59
84
|
*
|
|
@@ -117,9 +142,9 @@ const MemoMapTypeId = "~effect/Layer/MemoMap"
|
|
|
117
142
|
*
|
|
118
143
|
* @example
|
|
119
144
|
* ```ts
|
|
120
|
-
* import { Effect, Layer,
|
|
145
|
+
* import { Effect, Layer, Context } from "effect"
|
|
121
146
|
*
|
|
122
|
-
* class Database extends
|
|
147
|
+
* class Database extends Context.Service<Database, {
|
|
123
148
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
124
149
|
* }>()("Database") {}
|
|
125
150
|
*
|
|
@@ -129,11 +154,11 @@ const MemoMapTypeId = "~effect/Layer/MemoMap"
|
|
|
129
154
|
* const scope = yield* Effect.scope
|
|
130
155
|
*
|
|
131
156
|
* const dbLayer = Layer.succeed(Database)({
|
|
132
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
157
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
133
158
|
* })
|
|
134
|
-
* const
|
|
159
|
+
* const context = yield* Layer.buildWithMemoMap(dbLayer, memoMap, scope)
|
|
135
160
|
*
|
|
136
|
-
* return
|
|
161
|
+
* return Context.get(context, Database)
|
|
137
162
|
* })
|
|
138
163
|
* ```
|
|
139
164
|
*
|
|
@@ -145,8 +170,8 @@ export interface MemoMap {
|
|
|
145
170
|
readonly getOrElseMemoize: <RIn, E, ROut>(
|
|
146
171
|
layer: Layer<ROut, E, RIn>,
|
|
147
172
|
scope: Scope.Scope,
|
|
148
|
-
build: (memoMap: MemoMap, scope: Scope.Scope) => Effect<
|
|
149
|
-
) => Effect<
|
|
173
|
+
build: (memoMap: MemoMap, scope: Scope.Scope) => Effect<Context.Context<ROut>, E, RIn>
|
|
174
|
+
) => Effect<Context.Context<ROut>, E, RIn>
|
|
150
175
|
}
|
|
151
176
|
|
|
152
177
|
/**
|
|
@@ -154,14 +179,14 @@ export interface MemoMap {
|
|
|
154
179
|
*
|
|
155
180
|
* @example
|
|
156
181
|
* ```ts
|
|
157
|
-
* import { Effect, Layer,
|
|
182
|
+
* import { Effect, Layer, Context } from "effect"
|
|
158
183
|
*
|
|
159
|
-
* class Database extends
|
|
184
|
+
* class Database extends Context.Service<Database, {
|
|
160
185
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
161
186
|
* }>()("Database") {}
|
|
162
187
|
*
|
|
163
188
|
* const dbLayer = Layer.succeed(Database)({
|
|
164
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
189
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
165
190
|
* })
|
|
166
191
|
* const notALayer = { someProperty: "value" }
|
|
167
192
|
*
|
|
@@ -189,7 +214,7 @@ const fromBuildUnsafe = <ROut, E, RIn>(
|
|
|
189
214
|
build: (
|
|
190
215
|
memoMap: MemoMap,
|
|
191
216
|
scope: Scope.Scope
|
|
192
|
-
) => Effect<
|
|
217
|
+
) => Effect<Context.Context<ROut>, E, RIn>
|
|
193
218
|
): Layer<ROut, E, RIn> => {
|
|
194
219
|
const self = Object.create(LayerProto)
|
|
195
220
|
self.build = build
|
|
@@ -204,15 +229,15 @@ const fromBuildUnsafe = <ROut, E, RIn>(
|
|
|
204
229
|
*
|
|
205
230
|
* @example
|
|
206
231
|
* ```ts
|
|
207
|
-
* import { Effect, Layer,
|
|
232
|
+
* import { Effect, Layer, Context } from "effect"
|
|
208
233
|
*
|
|
209
|
-
* class Database extends
|
|
234
|
+
* class Database extends Context.Service<Database, {
|
|
210
235
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
211
236
|
* }>()("Database") {}
|
|
212
237
|
*
|
|
213
238
|
* const databaseLayer = Layer.fromBuild(() =>
|
|
214
239
|
* Effect.sync(() =>
|
|
215
|
-
*
|
|
240
|
+
* Context.make(Database, {
|
|
216
241
|
* query: (sql: string) => Effect.succeed("result")
|
|
217
242
|
* })
|
|
218
243
|
* )
|
|
@@ -226,7 +251,7 @@ export const fromBuild = <ROut, E, RIn>(
|
|
|
226
251
|
build: (
|
|
227
252
|
memoMap: MemoMap,
|
|
228
253
|
scope: Scope.Scope
|
|
229
|
-
) => Effect<
|
|
254
|
+
) => Effect<Context.Context<ROut>, E, RIn>
|
|
230
255
|
): Layer<ROut, E, RIn> =>
|
|
231
256
|
fromBuildUnsafe((memoMap: MemoMap, scope: Scope.Scope) => {
|
|
232
257
|
const layerScope = Scope.forkUnsafe(scope)
|
|
@@ -245,15 +270,15 @@ export const fromBuild = <ROut, E, RIn>(
|
|
|
245
270
|
*
|
|
246
271
|
* @example
|
|
247
272
|
* ```ts
|
|
248
|
-
* import { Effect, Layer,
|
|
273
|
+
* import { Effect, Layer, Context } from "effect"
|
|
249
274
|
*
|
|
250
|
-
* class Database extends
|
|
275
|
+
* class Database extends Context.Service<Database, {
|
|
251
276
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
252
277
|
* }>()("Database") {}
|
|
253
278
|
*
|
|
254
279
|
* const databaseLayer = Layer.fromBuildMemo(() =>
|
|
255
280
|
* Effect.sync(() =>
|
|
256
|
-
*
|
|
281
|
+
* Context.make(Database, {
|
|
257
282
|
* query: (sql: string) => Effect.succeed("result")
|
|
258
283
|
* })
|
|
259
284
|
* )
|
|
@@ -267,7 +292,7 @@ export const fromBuildMemo = <ROut, E, RIn>(
|
|
|
267
292
|
build: (
|
|
268
293
|
memoMap: MemoMap,
|
|
269
294
|
scope: Scope.Scope
|
|
270
|
-
) => Effect<
|
|
295
|
+
) => Effect<Context.Context<ROut>, E, RIn>
|
|
271
296
|
): Layer<ROut, E, RIn> => {
|
|
272
297
|
const self: Layer<ROut, E, RIn> = fromBuild((memoMap, scope) => memoMap.getOrElseMemoize(self, scope, build))
|
|
273
298
|
return self
|
|
@@ -280,15 +305,15 @@ class MemoMapImpl implements MemoMap {
|
|
|
280
305
|
|
|
281
306
|
readonly map = new Map<Layer<any, any, any>, {
|
|
282
307
|
observers: number
|
|
283
|
-
effect: Effect<
|
|
308
|
+
effect: Effect<Context.Context<any>, any>
|
|
284
309
|
readonly finalizer: (exit: Exit.Exit<unknown, unknown>) => Effect<void>
|
|
285
310
|
}>()
|
|
286
311
|
|
|
287
312
|
getOrElseMemoize<RIn, E, ROut>(
|
|
288
313
|
layer: Layer<ROut, E, RIn>,
|
|
289
314
|
scope: Scope.Scope,
|
|
290
|
-
build: (memoMap: MemoMap, scope: Scope.Scope) => Effect<
|
|
291
|
-
): Effect<
|
|
315
|
+
build: (memoMap: MemoMap, scope: Scope.Scope) => Effect<Context.Context<ROut>, E, RIn>
|
|
316
|
+
): Effect<Context.Context<ROut>, E, RIn> {
|
|
292
317
|
if (this.map.has(layer)) {
|
|
293
318
|
const entry = this.map.get(layer)!
|
|
294
319
|
entry.observers++
|
|
@@ -298,7 +323,7 @@ class MemoMapImpl implements MemoMap {
|
|
|
298
323
|
)
|
|
299
324
|
}
|
|
300
325
|
const layerScope = Scope.makeUnsafe()
|
|
301
|
-
const deferred = Deferred.makeUnsafe<
|
|
326
|
+
const deferred = Deferred.makeUnsafe<Context.Context<ROut>, E>()
|
|
302
327
|
const entry = {
|
|
303
328
|
observers: 1,
|
|
304
329
|
effect: Deferred.await(deferred),
|
|
@@ -328,9 +353,9 @@ class MemoMapImpl implements MemoMap {
|
|
|
328
353
|
*
|
|
329
354
|
* @example
|
|
330
355
|
* ```ts
|
|
331
|
-
* import { Effect, Layer,
|
|
356
|
+
* import { Effect, Layer, Context } from "effect"
|
|
332
357
|
*
|
|
333
|
-
* class Database extends
|
|
358
|
+
* class Database extends Context.Service<Database, {
|
|
334
359
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
335
360
|
* }>()("Database") {}
|
|
336
361
|
*
|
|
@@ -340,11 +365,11 @@ class MemoMapImpl implements MemoMap {
|
|
|
340
365
|
* const scope = yield* Effect.scope
|
|
341
366
|
*
|
|
342
367
|
* const dbLayer = Layer.succeed(Database)({
|
|
343
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
368
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
344
369
|
* })
|
|
345
|
-
* const
|
|
370
|
+
* const context = yield* Layer.buildWithMemoMap(dbLayer, memoMap, scope)
|
|
346
371
|
*
|
|
347
|
-
* return
|
|
372
|
+
* return Context.get(context, Database)
|
|
348
373
|
* })
|
|
349
374
|
* ```
|
|
350
375
|
*
|
|
@@ -358,9 +383,9 @@ export const makeMemoMapUnsafe = (): MemoMap => new MemoMapImpl()
|
|
|
358
383
|
*
|
|
359
384
|
* @example
|
|
360
385
|
* ```ts
|
|
361
|
-
* import { Effect, Layer,
|
|
386
|
+
* import { Effect, Layer, Context } from "effect"
|
|
362
387
|
*
|
|
363
|
-
* class Database extends
|
|
388
|
+
* class Database extends Context.Service<Database, {
|
|
364
389
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
365
390
|
* }>()("Database") {}
|
|
366
391
|
*
|
|
@@ -370,11 +395,11 @@ export const makeMemoMapUnsafe = (): MemoMap => new MemoMapImpl()
|
|
|
370
395
|
* const scope = yield* Effect.scope
|
|
371
396
|
*
|
|
372
397
|
* const dbLayer = Layer.succeed(Database)({
|
|
373
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
398
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
374
399
|
* })
|
|
375
|
-
* const
|
|
400
|
+
* const context = yield* Layer.buildWithMemoMap(dbLayer, memoMap, scope)
|
|
376
401
|
*
|
|
377
|
-
* return
|
|
402
|
+
* return Context.get(context, Database)
|
|
378
403
|
* })
|
|
379
404
|
* ```
|
|
380
405
|
*
|
|
@@ -392,8 +417,8 @@ export const makeMemoMap: Effect<MemoMap> = internalEffect.sync(makeMemoMapUnsaf
|
|
|
392
417
|
* @since 3.13.0
|
|
393
418
|
* @category models
|
|
394
419
|
*/
|
|
395
|
-
export class CurrentMemoMap extends
|
|
396
|
-
static getOrCreate: <Services>(self:
|
|
420
|
+
export class CurrentMemoMap extends Context.Service<CurrentMemoMap, MemoMap>()("effect/Layer/CurrentMemoMap") {
|
|
421
|
+
static getOrCreate: <Services>(self: Context.Context<Services>) => MemoMap = Context.getOrElse(
|
|
397
422
|
this,
|
|
398
423
|
makeMemoMapUnsafe
|
|
399
424
|
)
|
|
@@ -405,13 +430,13 @@ export class CurrentMemoMap extends ServiceMap.Service<CurrentMemoMap, MemoMap>(
|
|
|
405
430
|
*
|
|
406
431
|
* @example
|
|
407
432
|
* ```ts
|
|
408
|
-
* import { Effect, Layer,
|
|
433
|
+
* import { Effect, Layer, Context } from "effect"
|
|
409
434
|
*
|
|
410
|
-
* class Database extends
|
|
435
|
+
* class Database extends Context.Service<Database, {
|
|
411
436
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
412
437
|
* }>()("Database") {}
|
|
413
438
|
*
|
|
414
|
-
* class Logger extends
|
|
439
|
+
* class Logger extends Context.Service<Logger, {
|
|
415
440
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
416
441
|
* }>()("Logger") {}
|
|
417
442
|
*
|
|
@@ -422,23 +447,23 @@ export class CurrentMemoMap extends ServiceMap.Service<CurrentMemoMap, MemoMap>(
|
|
|
422
447
|
*
|
|
423
448
|
* // Build database layer with memoization
|
|
424
449
|
* const dbLayer = Layer.succeed(Database)({
|
|
425
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
450
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
426
451
|
* })
|
|
427
|
-
* const
|
|
452
|
+
* const dbContext = yield* Layer.buildWithMemoMap(dbLayer, memoMap, scope)
|
|
428
453
|
*
|
|
429
454
|
* // Build logger layer with same memoization (reuses memo if same layer)
|
|
430
455
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
431
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
456
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
432
457
|
* })
|
|
433
|
-
* const
|
|
458
|
+
* const loggerContext = yield* Layer.buildWithMemoMap(
|
|
434
459
|
* loggerLayer,
|
|
435
460
|
* memoMap,
|
|
436
461
|
* scope
|
|
437
462
|
* )
|
|
438
463
|
*
|
|
439
464
|
* return {
|
|
440
|
-
* database:
|
|
441
|
-
* logger:
|
|
465
|
+
* database: Context.get(dbContext, Database),
|
|
466
|
+
* logger: Context.get(loggerContext, Logger)
|
|
442
467
|
* }
|
|
443
468
|
* })
|
|
444
469
|
* ```
|
|
@@ -453,13 +478,13 @@ export const buildWithMemoMap: {
|
|
|
453
478
|
*
|
|
454
479
|
* @example
|
|
455
480
|
* ```ts
|
|
456
|
-
* import { Effect, Layer,
|
|
481
|
+
* import { Effect, Layer, Context } from "effect"
|
|
457
482
|
*
|
|
458
|
-
* class Database extends
|
|
483
|
+
* class Database extends Context.Service<Database, {
|
|
459
484
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
460
485
|
* }>()("Database") {}
|
|
461
486
|
*
|
|
462
|
-
* class Logger extends
|
|
487
|
+
* class Logger extends Context.Service<Logger, {
|
|
463
488
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
464
489
|
* }>()("Logger") {}
|
|
465
490
|
*
|
|
@@ -470,23 +495,23 @@ export const buildWithMemoMap: {
|
|
|
470
495
|
*
|
|
471
496
|
* // Build database layer with memoization
|
|
472
497
|
* const dbLayer = Layer.succeed(Database)({
|
|
473
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
498
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
474
499
|
* })
|
|
475
|
-
* const
|
|
500
|
+
* const dbContext = yield* Layer.buildWithMemoMap(dbLayer, memoMap, scope)
|
|
476
501
|
*
|
|
477
502
|
* // Build logger layer with same memoization (reuses memo if same layer)
|
|
478
503
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
479
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
504
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
480
505
|
* })
|
|
481
|
-
* const
|
|
506
|
+
* const loggerContext = yield* Layer.buildWithMemoMap(
|
|
482
507
|
* loggerLayer,
|
|
483
508
|
* memoMap,
|
|
484
509
|
* scope
|
|
485
510
|
* )
|
|
486
511
|
*
|
|
487
512
|
* return {
|
|
488
|
-
* database:
|
|
489
|
-
* logger:
|
|
513
|
+
* database: Context.get(dbContext, Database),
|
|
514
|
+
* logger: Context.get(loggerContext, Logger)
|
|
490
515
|
* }
|
|
491
516
|
* })
|
|
492
517
|
* ```
|
|
@@ -494,20 +519,20 @@ export const buildWithMemoMap: {
|
|
|
494
519
|
* @since 2.0.0
|
|
495
520
|
* @category memo map
|
|
496
521
|
*/
|
|
497
|
-
(memoMap: MemoMap, scope: Scope.Scope): <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Effect<
|
|
522
|
+
(memoMap: MemoMap, scope: Scope.Scope): <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Effect<Context.Context<ROut>, E, RIn>
|
|
498
523
|
/**
|
|
499
524
|
* Builds a layer into an `Effect` value, using the specified `MemoMap` to memoize
|
|
500
525
|
* the layer construction.
|
|
501
526
|
*
|
|
502
527
|
* @example
|
|
503
528
|
* ```ts
|
|
504
|
-
* import { Effect, Layer,
|
|
529
|
+
* import { Effect, Layer, Context } from "effect"
|
|
505
530
|
*
|
|
506
|
-
* class Database extends
|
|
531
|
+
* class Database extends Context.Service<Database, {
|
|
507
532
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
508
533
|
* }>()("Database") {}
|
|
509
534
|
*
|
|
510
|
-
* class Logger extends
|
|
535
|
+
* class Logger extends Context.Service<Logger, {
|
|
511
536
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
512
537
|
* }>()("Logger") {}
|
|
513
538
|
*
|
|
@@ -518,23 +543,23 @@ export const buildWithMemoMap: {
|
|
|
518
543
|
*
|
|
519
544
|
* // Build database layer with memoization
|
|
520
545
|
* const dbLayer = Layer.succeed(Database)({
|
|
521
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
546
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
522
547
|
* })
|
|
523
|
-
* const
|
|
548
|
+
* const dbContext = yield* Layer.buildWithMemoMap(dbLayer, memoMap, scope)
|
|
524
549
|
*
|
|
525
550
|
* // Build logger layer with same memoization (reuses memo if same layer)
|
|
526
551
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
527
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
552
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
528
553
|
* })
|
|
529
|
-
* const
|
|
554
|
+
* const loggerContext = yield* Layer.buildWithMemoMap(
|
|
530
555
|
* loggerLayer,
|
|
531
556
|
* memoMap,
|
|
532
557
|
* scope
|
|
533
558
|
* )
|
|
534
559
|
*
|
|
535
560
|
* return {
|
|
536
|
-
* database:
|
|
537
|
-
* logger:
|
|
561
|
+
* database: Context.get(dbContext, Database),
|
|
562
|
+
* logger: Context.get(loggerContext, Logger)
|
|
538
563
|
* }
|
|
539
564
|
* })
|
|
540
565
|
* ```
|
|
@@ -542,14 +567,14 @@ export const buildWithMemoMap: {
|
|
|
542
567
|
* @since 2.0.0
|
|
543
568
|
* @category memo map
|
|
544
569
|
*/
|
|
545
|
-
<RIn, E, ROut>(self: Layer<ROut, E, RIn>, memoMap: MemoMap, scope: Scope.Scope): Effect<
|
|
570
|
+
<RIn, E, ROut>(self: Layer<ROut, E, RIn>, memoMap: MemoMap, scope: Scope.Scope): Effect<Context.Context<ROut>, E, RIn>
|
|
546
571
|
} = dual(3, <RIn, E, ROut>(
|
|
547
572
|
self: Layer<ROut, E, RIn>,
|
|
548
573
|
memoMap: MemoMap,
|
|
549
574
|
scope: Scope.Scope
|
|
550
|
-
): Effect<
|
|
575
|
+
): Effect<Context.Context<ROut>, E, RIn> =>
|
|
551
576
|
internalEffect.provideService(
|
|
552
|
-
internalEffect.map(self.build(memoMap, scope),
|
|
577
|
+
internalEffect.map(self.build(memoMap, scope), Context.add(CurrentMemoMap, memoMap)),
|
|
553
578
|
CurrentMemoMap,
|
|
554
579
|
memoMap
|
|
555
580
|
))
|
|
@@ -559,23 +584,23 @@ export const buildWithMemoMap: {
|
|
|
559
584
|
*
|
|
560
585
|
* @example
|
|
561
586
|
* ```ts
|
|
562
|
-
* import { Effect, Layer,
|
|
587
|
+
* import { Effect, Layer, Context } from "effect"
|
|
563
588
|
*
|
|
564
|
-
* class Database extends
|
|
589
|
+
* class Database extends Context.Service<Database, {
|
|
565
590
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
566
591
|
* }>()("Database") {}
|
|
567
592
|
*
|
|
568
593
|
* // Build a layer to get its services
|
|
569
594
|
* const program = Effect.gen(function*() {
|
|
570
595
|
* const dbLayer = Layer.succeed(Database)({
|
|
571
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
596
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
572
597
|
* })
|
|
573
598
|
*
|
|
574
|
-
* // Build the layer into
|
|
575
|
-
* const
|
|
599
|
+
* // Build the layer into Context - automatically manages scope and memoization
|
|
600
|
+
* const context = yield* Layer.build(dbLayer)
|
|
576
601
|
*
|
|
577
602
|
* // Extract the specific service from the built layer
|
|
578
|
-
* const database =
|
|
603
|
+
* const database = Context.get(context, Database)
|
|
579
604
|
*
|
|
580
605
|
* return yield* database.query("SELECT * FROM users")
|
|
581
606
|
* })
|
|
@@ -586,12 +611,12 @@ export const buildWithMemoMap: {
|
|
|
586
611
|
*/
|
|
587
612
|
export const build = <RIn, E, ROut>(
|
|
588
613
|
self: Layer<ROut, E, RIn>
|
|
589
|
-
): Effect<
|
|
614
|
+
): Effect<Context.Context<ROut>, E, RIn | Scope.Scope> =>
|
|
590
615
|
core.withFiber((fiber) =>
|
|
591
616
|
buildWithMemoMap(
|
|
592
617
|
self,
|
|
593
|
-
CurrentMemoMap.getOrCreate(fiber.
|
|
594
|
-
|
|
618
|
+
CurrentMemoMap.getOrCreate(fiber.context),
|
|
619
|
+
Context.getUnsafe(fiber.context, Scope.Scope)
|
|
595
620
|
)
|
|
596
621
|
)
|
|
597
622
|
|
|
@@ -604,9 +629,9 @@ export const build = <RIn, E, ROut>(
|
|
|
604
629
|
*
|
|
605
630
|
* @example
|
|
606
631
|
* ```ts
|
|
607
|
-
* import { Effect, Layer, Scope,
|
|
632
|
+
* import { Effect, Layer, Scope, Context } from "effect"
|
|
608
633
|
*
|
|
609
|
-
* class Database extends
|
|
634
|
+
* class Database extends Context.Service<Database, {
|
|
610
635
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
611
636
|
* }>()("Database") {}
|
|
612
637
|
*
|
|
@@ -620,12 +645,12 @@ export const build = <RIn, E, ROut>(
|
|
|
620
645
|
* scope,
|
|
621
646
|
* Effect.sync(() => console.log("Database closed"))
|
|
622
647
|
* )
|
|
623
|
-
* return { query: (sql: string) => Effect.succeed(`Result: ${sql}`) }
|
|
648
|
+
* return { query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Result: ${sql}`)) }
|
|
624
649
|
* }))
|
|
625
650
|
*
|
|
626
651
|
* // Build with specific scope - resources tied to this scope
|
|
627
|
-
* const
|
|
628
|
-
* const database =
|
|
652
|
+
* const context = yield* Layer.buildWithScope(dbLayer, scope)
|
|
653
|
+
* const database = Context.get(context, Database)
|
|
629
654
|
*
|
|
630
655
|
* return yield* database.query("SELECT * FROM users")
|
|
631
656
|
* // Database will be closed when scope is closed
|
|
@@ -645,9 +670,9 @@ export const buildWithScope: {
|
|
|
645
670
|
*
|
|
646
671
|
* @example
|
|
647
672
|
* ```ts
|
|
648
|
-
* import { Effect, Layer, Scope,
|
|
673
|
+
* import { Effect, Layer, Scope, Context } from "effect"
|
|
649
674
|
*
|
|
650
|
-
* class Database extends
|
|
675
|
+
* class Database extends Context.Service<Database, {
|
|
651
676
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
652
677
|
* }>()("Database") {}
|
|
653
678
|
*
|
|
@@ -661,12 +686,12 @@ export const buildWithScope: {
|
|
|
661
686
|
* scope,
|
|
662
687
|
* Effect.sync(() => console.log("Database closed"))
|
|
663
688
|
* )
|
|
664
|
-
* return { query: (sql: string) => Effect.succeed(`Result: ${sql}`) }
|
|
689
|
+
* return { query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Result: ${sql}`)) }
|
|
665
690
|
* }))
|
|
666
691
|
*
|
|
667
692
|
* // Build with specific scope - resources tied to this scope
|
|
668
|
-
* const
|
|
669
|
-
* const database =
|
|
693
|
+
* const context = yield* Layer.buildWithScope(dbLayer, scope)
|
|
694
|
+
* const database = Context.get(context, Database)
|
|
670
695
|
*
|
|
671
696
|
* return yield* database.query("SELECT * FROM users")
|
|
672
697
|
* // Database will be closed when scope is closed
|
|
@@ -676,7 +701,7 @@ export const buildWithScope: {
|
|
|
676
701
|
* @since 2.0.0
|
|
677
702
|
* @category destructors
|
|
678
703
|
*/
|
|
679
|
-
(scope: Scope.Scope): <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Effect<
|
|
704
|
+
(scope: Scope.Scope): <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Effect<Context.Context<ROut>, E, RIn>
|
|
680
705
|
/**
|
|
681
706
|
* Builds a layer into an `Effect` value. Any resources associated with this
|
|
682
707
|
* layer will be released when the specified scope is closed unless their scope
|
|
@@ -686,9 +711,9 @@ export const buildWithScope: {
|
|
|
686
711
|
*
|
|
687
712
|
* @example
|
|
688
713
|
* ```ts
|
|
689
|
-
* import { Effect, Layer, Scope,
|
|
714
|
+
* import { Effect, Layer, Scope, Context } from "effect"
|
|
690
715
|
*
|
|
691
|
-
* class Database extends
|
|
716
|
+
* class Database extends Context.Service<Database, {
|
|
692
717
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
693
718
|
* }>()("Database") {}
|
|
694
719
|
*
|
|
@@ -702,12 +727,12 @@ export const buildWithScope: {
|
|
|
702
727
|
* scope,
|
|
703
728
|
* Effect.sync(() => console.log("Database closed"))
|
|
704
729
|
* )
|
|
705
|
-
* return { query: (sql: string) => Effect.succeed(`Result: ${sql}`) }
|
|
730
|
+
* return { query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Result: ${sql}`)) }
|
|
706
731
|
* }))
|
|
707
732
|
*
|
|
708
733
|
* // Build with specific scope - resources tied to this scope
|
|
709
|
-
* const
|
|
710
|
-
* const database =
|
|
734
|
+
* const context = yield* Layer.buildWithScope(dbLayer, scope)
|
|
735
|
+
* const database = Context.get(context, Database)
|
|
711
736
|
*
|
|
712
737
|
* return yield* database.query("SELECT * FROM users")
|
|
713
738
|
* // Database will be closed when scope is closed
|
|
@@ -717,15 +742,15 @@ export const buildWithScope: {
|
|
|
717
742
|
* @since 2.0.0
|
|
718
743
|
* @category destructors
|
|
719
744
|
*/
|
|
720
|
-
<RIn, E, ROut>(self: Layer<ROut, E, RIn>, scope: Scope.Scope): Effect<
|
|
745
|
+
<RIn, E, ROut>(self: Layer<ROut, E, RIn>, scope: Scope.Scope): Effect<Context.Context<ROut>, E, RIn>
|
|
721
746
|
} = dual(2, <RIn, E, ROut>(
|
|
722
747
|
self: Layer<ROut, E, RIn>,
|
|
723
748
|
scope: Scope.Scope
|
|
724
|
-
): Effect<
|
|
749
|
+
): Effect<Context.Context<ROut>, E, RIn> =>
|
|
725
750
|
core.withFiber((fiber) =>
|
|
726
751
|
buildWithMemoMap(
|
|
727
752
|
self,
|
|
728
|
-
CurrentMemoMap.getOrCreate(fiber.
|
|
753
|
+
CurrentMemoMap.getOrCreate(fiber.context),
|
|
729
754
|
scope
|
|
730
755
|
)
|
|
731
756
|
))
|
|
@@ -735,23 +760,23 @@ export const buildWithScope: {
|
|
|
735
760
|
*
|
|
736
761
|
* @example
|
|
737
762
|
* ```ts
|
|
738
|
-
* import { Effect, Layer,
|
|
763
|
+
* import { Effect, Layer, Context } from "effect"
|
|
739
764
|
*
|
|
740
|
-
* class Database extends
|
|
765
|
+
* class Database extends Context.Service<Database, {
|
|
741
766
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
742
767
|
* }>()("Database") {}
|
|
743
768
|
*
|
|
744
|
-
* class Logger extends
|
|
769
|
+
* class Logger extends Context.Service<Logger, {
|
|
745
770
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
746
771
|
* }>()("Logger") {}
|
|
747
772
|
*
|
|
748
773
|
* // Create layers from concrete service implementations
|
|
749
774
|
* const databaseLayer = Layer.succeed(Database)({
|
|
750
|
-
* query: (sql: string) => Effect.succeed(`Query result: ${sql}`)
|
|
775
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Query result: ${sql}`))
|
|
751
776
|
* })
|
|
752
777
|
*
|
|
753
778
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
754
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
779
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
755
780
|
* })
|
|
756
781
|
*
|
|
757
782
|
* // Use the layers in a program
|
|
@@ -778,23 +803,23 @@ export const succeed: {
|
|
|
778
803
|
*
|
|
779
804
|
* @example
|
|
780
805
|
* ```ts
|
|
781
|
-
* import { Effect, Layer,
|
|
806
|
+
* import { Effect, Layer, Context } from "effect"
|
|
782
807
|
*
|
|
783
|
-
* class Database extends
|
|
808
|
+
* class Database extends Context.Service<Database, {
|
|
784
809
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
785
810
|
* }>()("Database") {}
|
|
786
811
|
*
|
|
787
|
-
* class Logger extends
|
|
812
|
+
* class Logger extends Context.Service<Logger, {
|
|
788
813
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
789
814
|
* }>()("Logger") {}
|
|
790
815
|
*
|
|
791
816
|
* // Create layers from concrete service implementations
|
|
792
817
|
* const databaseLayer = Layer.succeed(Database)({
|
|
793
|
-
* query: (sql: string) => Effect.succeed(`Query result: ${sql}`)
|
|
818
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Query result: ${sql}`))
|
|
794
819
|
* })
|
|
795
820
|
*
|
|
796
821
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
797
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
822
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
798
823
|
* })
|
|
799
824
|
*
|
|
800
825
|
* // Use the layers in a program
|
|
@@ -815,29 +840,29 @@ export const succeed: {
|
|
|
815
840
|
* @since 2.0.0
|
|
816
841
|
* @category constructors
|
|
817
842
|
*/
|
|
818
|
-
<I, S>(service:
|
|
843
|
+
<I, S>(service: Context.Key<I, S>): (resource: S) => Layer<I>
|
|
819
844
|
/**
|
|
820
845
|
* Constructs a layer from the specified value.
|
|
821
846
|
*
|
|
822
847
|
* @example
|
|
823
848
|
* ```ts
|
|
824
|
-
* import { Effect, Layer,
|
|
849
|
+
* import { Effect, Layer, Context } from "effect"
|
|
825
850
|
*
|
|
826
|
-
* class Database extends
|
|
851
|
+
* class Database extends Context.Service<Database, {
|
|
827
852
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
828
853
|
* }>()("Database") {}
|
|
829
854
|
*
|
|
830
|
-
* class Logger extends
|
|
855
|
+
* class Logger extends Context.Service<Logger, {
|
|
831
856
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
832
857
|
* }>()("Logger") {}
|
|
833
858
|
*
|
|
834
859
|
* // Create layers from concrete service implementations
|
|
835
860
|
* const databaseLayer = Layer.succeed(Database)({
|
|
836
|
-
* query: (sql: string) => Effect.succeed(`Query result: ${sql}`)
|
|
861
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Query result: ${sql}`))
|
|
837
862
|
* })
|
|
838
863
|
*
|
|
839
864
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
840
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
865
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
841
866
|
* })
|
|
842
867
|
*
|
|
843
868
|
* // Use the layers in a program
|
|
@@ -858,12 +883,12 @@ export const succeed: {
|
|
|
858
883
|
* @since 2.0.0
|
|
859
884
|
* @category constructors
|
|
860
885
|
*/
|
|
861
|
-
<I, S>(service:
|
|
886
|
+
<I, S>(service: Context.Key<I, S>, resource: Types.NoInfer<S>): Layer<I>
|
|
862
887
|
} = function() {
|
|
863
888
|
if (arguments.length === 1) {
|
|
864
|
-
return (resource: any) =>
|
|
889
|
+
return (resource: any) => succeedContext(Context.make(arguments[0], resource))
|
|
865
890
|
}
|
|
866
|
-
return
|
|
891
|
+
return succeedContext(Context.make(arguments[0], arguments[1]))
|
|
867
892
|
} as any
|
|
868
893
|
|
|
869
894
|
/**
|
|
@@ -871,40 +896,39 @@ export const succeed: {
|
|
|
871
896
|
* services.
|
|
872
897
|
*
|
|
873
898
|
* This is a more general version of `succeed` that allows you to provide multiple
|
|
874
|
-
* services at once through a `
|
|
899
|
+
* services at once through a `Context`.
|
|
875
900
|
*
|
|
876
901
|
* @example
|
|
877
902
|
* ```ts
|
|
878
|
-
* import { Effect, Layer,
|
|
903
|
+
* import { Effect, Layer, Context } from "effect"
|
|
879
904
|
*
|
|
880
|
-
* class Database extends
|
|
905
|
+
* class Database extends Context.Service<Database, {
|
|
881
906
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
882
907
|
* }>()("Database") {}
|
|
883
908
|
*
|
|
884
|
-
* class Logger extends
|
|
909
|
+
* class Logger extends Context.Service<Logger, {
|
|
885
910
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
886
911
|
* }>()("Logger") {}
|
|
887
912
|
*
|
|
888
|
-
* const
|
|
889
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
890
|
-
* })
|
|
891
|
-
* .
|
|
892
|
-
*
|
|
893
|
-
*
|
|
894
|
-
*
|
|
895
|
-
* )
|
|
913
|
+
* const context = Context.make(Database, {
|
|
914
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
915
|
+
* }).pipe(
|
|
916
|
+
* Context.add(Logger, {
|
|
917
|
+
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
918
|
+
* })
|
|
919
|
+
* )
|
|
896
920
|
*
|
|
897
|
-
* const layer = Layer.
|
|
921
|
+
* const layer = Layer.succeedContext(context)
|
|
898
922
|
* ```
|
|
899
923
|
*
|
|
900
924
|
* @since 2.0.0
|
|
901
925
|
* @category constructors
|
|
902
926
|
*/
|
|
903
|
-
export const
|
|
904
|
-
fromBuildUnsafe(constant(internalEffect.succeed(
|
|
927
|
+
export const succeedContext = <A>(context: Context.Context<A>): Layer<A> =>
|
|
928
|
+
fromBuildUnsafe(constant(internalEffect.succeed(context)))
|
|
905
929
|
|
|
906
930
|
/**
|
|
907
|
-
* A Layer that constructs an empty
|
|
931
|
+
* A Layer that constructs an empty Context.
|
|
908
932
|
*
|
|
909
933
|
* This layer provides no services and can be used as a neutral element
|
|
910
934
|
* in layer composition or as a starting point for building layers.
|
|
@@ -919,7 +943,7 @@ export const succeedServices = <A>(services: ServiceMap.ServiceMap<A>): Layer<A>
|
|
|
919
943
|
* @since 2.0.0
|
|
920
944
|
* @category constructors
|
|
921
945
|
*/
|
|
922
|
-
export const empty: Layer<never> =
|
|
946
|
+
export const empty: Layer<never> = succeedContext(Context.empty())
|
|
923
947
|
|
|
924
948
|
/**
|
|
925
949
|
* Lazily constructs a layer from the specified value.
|
|
@@ -929,9 +953,9 @@ export const empty: Layer<never> = succeedServices(ServiceMap.empty())
|
|
|
929
953
|
*
|
|
930
954
|
* @example
|
|
931
955
|
* ```ts
|
|
932
|
-
* import { Effect, Layer,
|
|
956
|
+
* import { Effect, Layer, Context } from "effect"
|
|
933
957
|
*
|
|
934
|
-
* class Database extends
|
|
958
|
+
* class Database extends Context.Service<Database, {
|
|
935
959
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
936
960
|
* }>()("Database") {}
|
|
937
961
|
*
|
|
@@ -952,9 +976,9 @@ export const sync: {
|
|
|
952
976
|
*
|
|
953
977
|
* @example
|
|
954
978
|
* ```ts
|
|
955
|
-
* import { Effect, Layer,
|
|
979
|
+
* import { Effect, Layer, Context } from "effect"
|
|
956
980
|
*
|
|
957
|
-
* class Database extends
|
|
981
|
+
* class Database extends Context.Service<Database, {
|
|
958
982
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
959
983
|
* }>()("Database") {}
|
|
960
984
|
*
|
|
@@ -966,7 +990,7 @@ export const sync: {
|
|
|
966
990
|
* @since 2.0.0
|
|
967
991
|
* @category constructors
|
|
968
992
|
*/
|
|
969
|
-
<I, S>(service:
|
|
993
|
+
<I, S>(service: Context.Key<I, S>): (evaluate: LazyArg<S>) => Layer<I>
|
|
970
994
|
/**
|
|
971
995
|
* Lazily constructs a layer from the specified value.
|
|
972
996
|
*
|
|
@@ -975,9 +999,9 @@ export const sync: {
|
|
|
975
999
|
*
|
|
976
1000
|
* @example
|
|
977
1001
|
* ```ts
|
|
978
|
-
* import { Effect, Layer,
|
|
1002
|
+
* import { Effect, Layer, Context } from "effect"
|
|
979
1003
|
*
|
|
980
|
-
* class Database extends
|
|
1004
|
+
* class Database extends Context.Service<Database, {
|
|
981
1005
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
982
1006
|
* }>()("Database") {}
|
|
983
1007
|
*
|
|
@@ -989,31 +1013,31 @@ export const sync: {
|
|
|
989
1013
|
* @since 2.0.0
|
|
990
1014
|
* @category constructors
|
|
991
1015
|
*/
|
|
992
|
-
<I, S>(service:
|
|
1016
|
+
<I, S>(service: Context.Key<I, S>, evaluate: LazyArg<Types.NoInfer<S>>): Layer<I>
|
|
993
1017
|
} = function() {
|
|
994
1018
|
if (arguments.length === 1) {
|
|
995
|
-
return (evaluate: LazyArg<any>) =>
|
|
1019
|
+
return (evaluate: LazyArg<any>) => syncContext(() => Context.make(arguments[0], evaluate()))
|
|
996
1020
|
}
|
|
997
|
-
return
|
|
1021
|
+
return syncContext(() => Context.make(arguments[0], arguments[1]()))
|
|
998
1022
|
} as any
|
|
999
1023
|
|
|
1000
1024
|
/**
|
|
1001
1025
|
* Lazily constructs a layer from the specified value, which must return one or more
|
|
1002
1026
|
* services.
|
|
1003
1027
|
*
|
|
1004
|
-
* This is a lazy version of `
|
|
1028
|
+
* This is a lazy version of `succeedContext` where the Context is computed
|
|
1005
1029
|
* synchronously only when the layer is built.
|
|
1006
1030
|
*
|
|
1007
1031
|
* @example
|
|
1008
1032
|
* ```ts
|
|
1009
|
-
* import { Effect, Layer,
|
|
1033
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1010
1034
|
*
|
|
1011
|
-
* class Database extends
|
|
1035
|
+
* class Database extends Context.Service<Database, {
|
|
1012
1036
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1013
1037
|
* }>()("Database") {}
|
|
1014
1038
|
*
|
|
1015
|
-
* const layer = Layer.
|
|
1016
|
-
*
|
|
1039
|
+
* const layer = Layer.syncContext(() =>
|
|
1040
|
+
* Context.make(Database, {
|
|
1017
1041
|
* query: (sql: string) => Effect.succeed(`Query: ${sql}`)
|
|
1018
1042
|
* })
|
|
1019
1043
|
* )
|
|
@@ -1022,7 +1046,7 @@ export const sync: {
|
|
|
1022
1046
|
* @since 2.0.0
|
|
1023
1047
|
* @category constructors
|
|
1024
1048
|
*/
|
|
1025
|
-
export const
|
|
1049
|
+
export const syncContext = <A>(evaluate: LazyArg<Context.Context<A>>): Layer<A> =>
|
|
1026
1050
|
fromBuildMemo(constant(internalEffect.sync(evaluate)))
|
|
1027
1051
|
|
|
1028
1052
|
/**
|
|
@@ -1040,9 +1064,9 @@ export const syncServices = <A>(evaluate: LazyArg<ServiceMap.ServiceMap<A>>): La
|
|
|
1040
1064
|
*
|
|
1041
1065
|
* @example
|
|
1042
1066
|
* ```ts
|
|
1043
|
-
* import { Effect, Layer,
|
|
1067
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1044
1068
|
*
|
|
1045
|
-
* class Database extends
|
|
1069
|
+
* class Database extends Context.Service<Database, {
|
|
1046
1070
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1047
1071
|
* }>()("Database") {}
|
|
1048
1072
|
*
|
|
@@ -1072,9 +1096,9 @@ export const effect: {
|
|
|
1072
1096
|
*
|
|
1073
1097
|
* @example
|
|
1074
1098
|
* ```ts
|
|
1075
|
-
* import { Effect, Layer,
|
|
1099
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1076
1100
|
*
|
|
1077
|
-
* class Database extends
|
|
1101
|
+
* class Database extends Context.Service<Database, {
|
|
1078
1102
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1079
1103
|
* }>()("Database") {}
|
|
1080
1104
|
*
|
|
@@ -1088,7 +1112,7 @@ export const effect: {
|
|
|
1088
1112
|
* @since 2.0.0
|
|
1089
1113
|
* @category constructors
|
|
1090
1114
|
*/
|
|
1091
|
-
<I, S>(service:
|
|
1115
|
+
<I, S>(service: Context.Key<I, S>): <E, R>(
|
|
1092
1116
|
effect: Effect<S, E, R>
|
|
1093
1117
|
) => Layer<I, E, Exclude<R, Scope.Scope>>
|
|
1094
1118
|
/**
|
|
@@ -1106,9 +1130,9 @@ export const effect: {
|
|
|
1106
1130
|
*
|
|
1107
1131
|
* @example
|
|
1108
1132
|
* ```ts
|
|
1109
|
-
* import { Effect, Layer,
|
|
1133
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1110
1134
|
*
|
|
1111
|
-
* class Database extends
|
|
1135
|
+
* class Database extends Context.Service<Database, {
|
|
1112
1136
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1113
1137
|
* }>()("Database") {}
|
|
1114
1138
|
*
|
|
@@ -1122,7 +1146,7 @@ export const effect: {
|
|
|
1122
1146
|
* @since 2.0.0
|
|
1123
1147
|
* @category constructors
|
|
1124
1148
|
*/
|
|
1125
|
-
<I, S, E, R>(service:
|
|
1149
|
+
<I, S, E, R>(service: Context.Key<I, S>, effect: Effect<Types.NoInfer<S>, E, R>): Layer<I, E, Exclude<R, Scope.Scope>>
|
|
1126
1150
|
} = function() {
|
|
1127
1151
|
if (arguments.length === 1) {
|
|
1128
1152
|
return (effect: any) => effectImpl(arguments[0], effect)
|
|
@@ -1131,10 +1155,10 @@ export const effect: {
|
|
|
1131
1155
|
} as any
|
|
1132
1156
|
|
|
1133
1157
|
const effectImpl = <I, S, E, R>(
|
|
1134
|
-
service:
|
|
1158
|
+
service: Context.Key<I, S>,
|
|
1135
1159
|
effect: Effect<S, E, R>
|
|
1136
1160
|
): Layer<I, E, Exclude<R, Scope.Scope>> =>
|
|
1137
|
-
|
|
1161
|
+
effectContext(internalEffect.map(effect, (value) => Context.make(service, value)))
|
|
1138
1162
|
|
|
1139
1163
|
/**
|
|
1140
1164
|
* Constructs a layer from the specified scoped effect, which must return one
|
|
@@ -1145,15 +1169,15 @@ const effectImpl = <I, S, E, R>(
|
|
|
1145
1169
|
*
|
|
1146
1170
|
* @example
|
|
1147
1171
|
* ```ts
|
|
1148
|
-
* import { Effect, Layer,
|
|
1172
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1149
1173
|
*
|
|
1150
|
-
* class Database extends
|
|
1174
|
+
* class Database extends Context.Service<
|
|
1151
1175
|
* Database,
|
|
1152
1176
|
* { readonly query: (sql: string) => Effect.Effect<string> }
|
|
1153
1177
|
* >()("Database") {}
|
|
1154
1178
|
*
|
|
1155
|
-
* const layer = Layer.
|
|
1156
|
-
* Effect.succeed(
|
|
1179
|
+
* const layer = Layer.effectContext(
|
|
1180
|
+
* Effect.succeed(Context.make(Database, {
|
|
1157
1181
|
* query: (sql: string) => Effect.succeed(`Query: ${sql}`)
|
|
1158
1182
|
* }))
|
|
1159
1183
|
* )
|
|
@@ -1162,8 +1186,8 @@ const effectImpl = <I, S, E, R>(
|
|
|
1162
1186
|
* @since 2.0.0
|
|
1163
1187
|
* @category constructors
|
|
1164
1188
|
*/
|
|
1165
|
-
export const
|
|
1166
|
-
effect: Effect<
|
|
1189
|
+
export const effectContext = <A, E, R>(
|
|
1190
|
+
effect: Effect<Context.Context<A>, E, R>
|
|
1167
1191
|
): Layer<A, E, Exclude<R, Scope.Scope>> => fromBuildMemo((_, scope) => Scope.provide(effect, scope))
|
|
1168
1192
|
|
|
1169
1193
|
/**
|
|
@@ -1193,7 +1217,34 @@ export const effectServices = <A, E, R>(
|
|
|
1193
1217
|
* @category constructors
|
|
1194
1218
|
*/
|
|
1195
1219
|
export const effectDiscard = <X, E, R>(effect: Effect<X, E, R>): Layer<never, E, Exclude<R, Scope.Scope>> =>
|
|
1196
|
-
|
|
1220
|
+
effectContext(internalEffect.as(effect, Context.empty()))
|
|
1221
|
+
|
|
1222
|
+
/**
|
|
1223
|
+
* Lazily constructs a layer using the specified factory.
|
|
1224
|
+
*
|
|
1225
|
+
* The factory is evaluated only when the suspended layer is first built, and
|
|
1226
|
+
* the result is memoized with normal layer sharing semantics.
|
|
1227
|
+
*
|
|
1228
|
+
* @example
|
|
1229
|
+
* ```ts
|
|
1230
|
+
* import { Layer, Context } from "effect"
|
|
1231
|
+
*
|
|
1232
|
+
* class Config extends Context.Service<Config, string>()("Config") {}
|
|
1233
|
+
*
|
|
1234
|
+
* const useProd = true
|
|
1235
|
+
*
|
|
1236
|
+
* const layer = Layer.suspend(() =>
|
|
1237
|
+
* useProd
|
|
1238
|
+
* ? Layer.succeed(Config)("https://api.example.com")
|
|
1239
|
+
* : Layer.succeed(Config)("http://localhost:3000")
|
|
1240
|
+
* )
|
|
1241
|
+
* ```
|
|
1242
|
+
*
|
|
1243
|
+
* @since 4.0.0
|
|
1244
|
+
* @category constructors
|
|
1245
|
+
*/
|
|
1246
|
+
export const suspend = <A, E, R>(evaluate: LazyArg<Layer<A, E, R>>): Layer<A, E, R> =>
|
|
1247
|
+
fromBuildMemo((memoMap, scope) => internalEffect.suspend(() => evaluate().build(memoMap, scope)))
|
|
1197
1248
|
|
|
1198
1249
|
/**
|
|
1199
1250
|
* Unwraps a Layer from an Effect, flattening the nested structure.
|
|
@@ -1204,14 +1255,14 @@ export const effectDiscard = <X, E, R>(effect: Effect<X, E, R>): Layer<never, E,
|
|
|
1204
1255
|
*
|
|
1205
1256
|
* @example
|
|
1206
1257
|
* ```ts
|
|
1207
|
-
* import { Effect, Layer,
|
|
1258
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1208
1259
|
*
|
|
1209
|
-
* class Database extends
|
|
1260
|
+
* class Database extends Context.Service<Database, {
|
|
1210
1261
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1211
1262
|
* }>()("Database") {}
|
|
1212
1263
|
*
|
|
1213
1264
|
* const layerEffect = Effect.succeed(
|
|
1214
|
-
* Layer.succeed(Database)({ query: (sql: string) => Effect.succeed("result") })
|
|
1265
|
+
* Layer.succeed(Database)({ query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result")) })
|
|
1215
1266
|
* )
|
|
1216
1267
|
*
|
|
1217
1268
|
* const unwrappedLayer = Layer.unwrap(layerEffect)
|
|
@@ -1223,8 +1274,8 @@ export const effectDiscard = <X, E, R>(effect: Effect<X, E, R>): Layer<never, E,
|
|
|
1223
1274
|
export const unwrap = <A, E1, R1, E, R>(
|
|
1224
1275
|
self: Effect<Layer<A, E1, R1>, E, R>
|
|
1225
1276
|
): Layer<A, E | E1, R1 | Exclude<R, Scope.Scope>> => {
|
|
1226
|
-
const service =
|
|
1227
|
-
return flatMap(effect(service)(self),
|
|
1277
|
+
const service = Context.Service<Layer<A, E1, R1>>("effect/Layer/unwrap")
|
|
1278
|
+
return flatMap(effect(service)(self), Context.get(service))
|
|
1228
1279
|
}
|
|
1229
1280
|
|
|
1230
1281
|
const mergeAllEffect = <Layers extends [Layer<never, any, any>, ...Array<Layer<never, any, any>>]>(
|
|
@@ -1232,7 +1283,7 @@ const mergeAllEffect = <Layers extends [Layer<never, any, any>, ...Array<Layer<n
|
|
|
1232
1283
|
memoMap: MemoMap,
|
|
1233
1284
|
scope: Scope.Scope
|
|
1234
1285
|
): Effect<
|
|
1235
|
-
|
|
1286
|
+
Context.Context<{ [k in keyof Layers]: Success<Layers[k]> }[number]>,
|
|
1236
1287
|
{ [k in keyof Layers]: Error<Layers[k]> }[number],
|
|
1237
1288
|
{ [k in keyof Layers]: Services<Layers[k]> }[number]
|
|
1238
1289
|
> => {
|
|
@@ -1240,7 +1291,7 @@ const mergeAllEffect = <Layers extends [Layer<never, any, any>, ...Array<Layer<n
|
|
|
1240
1291
|
return internalEffect.forEach(layers, (layer) => layer.build(memoMap, Scope.forkUnsafe(parentScope, "sequential")), {
|
|
1241
1292
|
concurrency: layers.length
|
|
1242
1293
|
}).pipe(
|
|
1243
|
-
internalEffect.map((
|
|
1294
|
+
internalEffect.map((context) => Context.mergeAll(...(context as any)))
|
|
1244
1295
|
)
|
|
1245
1296
|
}
|
|
1246
1297
|
|
|
@@ -1252,21 +1303,21 @@ const mergeAllEffect = <Layers extends [Layer<never, any, any>, ...Array<Layer<n
|
|
|
1252
1303
|
*
|
|
1253
1304
|
* @example
|
|
1254
1305
|
* ```ts
|
|
1255
|
-
* import { Effect, Layer,
|
|
1306
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1256
1307
|
*
|
|
1257
|
-
* class Database extends
|
|
1308
|
+
* class Database extends Context.Service<Database, {
|
|
1258
1309
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1259
1310
|
* }>()("Database") {}
|
|
1260
1311
|
*
|
|
1261
|
-
* class Logger extends
|
|
1312
|
+
* class Logger extends Context.Service<Logger, {
|
|
1262
1313
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1263
1314
|
* }>()("Logger") {}
|
|
1264
1315
|
*
|
|
1265
1316
|
* const dbLayer = Layer.succeed(Database)({
|
|
1266
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
1317
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
1267
1318
|
* })
|
|
1268
1319
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1269
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
1320
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
1270
1321
|
* })
|
|
1271
1322
|
*
|
|
1272
1323
|
* const mergedLayer = Layer.mergeAll(dbLayer, loggerLayer)
|
|
@@ -1291,21 +1342,21 @@ export const mergeAll = <Layers extends [Layer<never, any, any>, ...Array<Layer<
|
|
|
1291
1342
|
*
|
|
1292
1343
|
* @example
|
|
1293
1344
|
* ```ts
|
|
1294
|
-
* import { Effect, Layer,
|
|
1345
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1295
1346
|
*
|
|
1296
|
-
* class Database extends
|
|
1347
|
+
* class Database extends Context.Service<Database, {
|
|
1297
1348
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1298
1349
|
* }>()("Database") {}
|
|
1299
1350
|
*
|
|
1300
|
-
* class Logger extends
|
|
1351
|
+
* class Logger extends Context.Service<Logger, {
|
|
1301
1352
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1302
1353
|
* }>()("Logger") {}
|
|
1303
1354
|
*
|
|
1304
1355
|
* const dbLayer = Layer.succeed(Database)({
|
|
1305
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
1356
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
1306
1357
|
* })
|
|
1307
1358
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1308
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
1359
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
1309
1360
|
* })
|
|
1310
1361
|
*
|
|
1311
1362
|
* const mergedLayer = Layer.merge(dbLayer, loggerLayer)
|
|
@@ -1323,21 +1374,21 @@ export const merge: {
|
|
|
1323
1374
|
*
|
|
1324
1375
|
* @example
|
|
1325
1376
|
* ```ts
|
|
1326
|
-
* import { Effect, Layer,
|
|
1377
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1327
1378
|
*
|
|
1328
|
-
* class Database extends
|
|
1379
|
+
* class Database extends Context.Service<Database, {
|
|
1329
1380
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1330
1381
|
* }>()("Database") {}
|
|
1331
1382
|
*
|
|
1332
|
-
* class Logger extends
|
|
1383
|
+
* class Logger extends Context.Service<Logger, {
|
|
1333
1384
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1334
1385
|
* }>()("Logger") {}
|
|
1335
1386
|
*
|
|
1336
1387
|
* const dbLayer = Layer.succeed(Database)({
|
|
1337
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
1388
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
1338
1389
|
* })
|
|
1339
1390
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1340
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
1391
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
1341
1392
|
* })
|
|
1342
1393
|
*
|
|
1343
1394
|
* const mergedLayer = Layer.merge(dbLayer, loggerLayer)
|
|
@@ -1355,21 +1406,21 @@ export const merge: {
|
|
|
1355
1406
|
*
|
|
1356
1407
|
* @example
|
|
1357
1408
|
* ```ts
|
|
1358
|
-
* import { Effect, Layer,
|
|
1409
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1359
1410
|
*
|
|
1360
|
-
* class Database extends
|
|
1411
|
+
* class Database extends Context.Service<Database, {
|
|
1361
1412
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1362
1413
|
* }>()("Database") {}
|
|
1363
1414
|
*
|
|
1364
|
-
* class Logger extends
|
|
1415
|
+
* class Logger extends Context.Service<Logger, {
|
|
1365
1416
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1366
1417
|
* }>()("Logger") {}
|
|
1367
1418
|
*
|
|
1368
1419
|
* const dbLayer = Layer.succeed(Database)({
|
|
1369
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
1420
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
1370
1421
|
* })
|
|
1371
1422
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1372
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
1423
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
1373
1424
|
* })
|
|
1374
1425
|
*
|
|
1375
1426
|
* const mergedLayer = Layer.merge(dbLayer, loggerLayer)
|
|
@@ -1394,21 +1445,21 @@ export const merge: {
|
|
|
1394
1445
|
*
|
|
1395
1446
|
* @example
|
|
1396
1447
|
* ```ts
|
|
1397
|
-
* import { Effect, Layer,
|
|
1448
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1398
1449
|
*
|
|
1399
|
-
* class Database extends
|
|
1450
|
+
* class Database extends Context.Service<Database, {
|
|
1400
1451
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1401
1452
|
* }>()("Database") {}
|
|
1402
1453
|
*
|
|
1403
|
-
* class Logger extends
|
|
1454
|
+
* class Logger extends Context.Service<Logger, {
|
|
1404
1455
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1405
1456
|
* }>()("Logger") {}
|
|
1406
1457
|
*
|
|
1407
1458
|
* const dbLayer = Layer.succeed(Database)({
|
|
1408
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
1459
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
1409
1460
|
* })
|
|
1410
1461
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1411
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
1462
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
1412
1463
|
* })
|
|
1413
1464
|
*
|
|
1414
1465
|
* const mergedLayer = Layer.merge(dbLayer, loggerLayer)
|
|
@@ -1426,21 +1477,21 @@ export const merge: {
|
|
|
1426
1477
|
*
|
|
1427
1478
|
* @example
|
|
1428
1479
|
* ```ts
|
|
1429
|
-
* import { Effect, Layer,
|
|
1480
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1430
1481
|
*
|
|
1431
|
-
* class Database extends
|
|
1482
|
+
* class Database extends Context.Service<Database, {
|
|
1432
1483
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1433
1484
|
* }>()("Database") {}
|
|
1434
1485
|
*
|
|
1435
|
-
* class Logger extends
|
|
1486
|
+
* class Logger extends Context.Service<Logger, {
|
|
1436
1487
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1437
1488
|
* }>()("Logger") {}
|
|
1438
1489
|
*
|
|
1439
1490
|
* const dbLayer = Layer.succeed(Database)({
|
|
1440
|
-
* query: (sql: string) => Effect.succeed("result")
|
|
1491
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed("result"))
|
|
1441
1492
|
* })
|
|
1442
1493
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1443
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
1494
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
1444
1495
|
* })
|
|
1445
1496
|
*
|
|
1446
1497
|
* const mergedLayer = Layer.merge(dbLayer, loggerLayer)
|
|
@@ -1464,9 +1515,9 @@ const provideWith = (
|
|
|
1464
1515
|
self: Layer<any, any, any>,
|
|
1465
1516
|
that: Layer<any, any, any> | ReadonlyArray<Layer<any, any, any>>,
|
|
1466
1517
|
f: (
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
) =>
|
|
1518
|
+
selfContext: Context.Context<any>,
|
|
1519
|
+
thatContext: Context.Context<any>
|
|
1520
|
+
) => Context.Context<any>
|
|
1470
1521
|
) =>
|
|
1471
1522
|
fromBuild((memoMap, scope) =>
|
|
1472
1523
|
internalEffect.flatMap(
|
|
@@ -1475,7 +1526,7 @@ const provideWith = (
|
|
|
1475
1526
|
: (that as Layer<any, any, any>).build(memoMap, scope),
|
|
1476
1527
|
(context) =>
|
|
1477
1528
|
self.build(memoMap, scope).pipe(
|
|
1478
|
-
internalEffect.
|
|
1529
|
+
internalEffect.provideContext(context),
|
|
1479
1530
|
internalEffect.map((merged) => f(merged, context))
|
|
1480
1531
|
)
|
|
1481
1532
|
)
|
|
@@ -1488,30 +1539,30 @@ const provideWith = (
|
|
|
1488
1539
|
*
|
|
1489
1540
|
* @example
|
|
1490
1541
|
* ```ts
|
|
1491
|
-
* import { Effect, Layer,
|
|
1542
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1492
1543
|
*
|
|
1493
|
-
* class Database extends
|
|
1544
|
+
* class Database extends Context.Service<Database, {
|
|
1494
1545
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1495
1546
|
* }>()("Database") {}
|
|
1496
1547
|
*
|
|
1497
|
-
* class UserService extends
|
|
1548
|
+
* class UserService extends Context.Service<UserService, {
|
|
1498
1549
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
1499
1550
|
* id: string
|
|
1500
1551
|
* name: string
|
|
1501
1552
|
* }>
|
|
1502
1553
|
* }>()("UserService") {}
|
|
1503
1554
|
*
|
|
1504
|
-
* class Logger extends
|
|
1555
|
+
* class Logger extends Context.Service<Logger, {
|
|
1505
1556
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1506
1557
|
* }>()("Logger") {}
|
|
1507
1558
|
*
|
|
1508
1559
|
* // Create dependency layers
|
|
1509
1560
|
* const databaseLayer = Layer.succeed(Database)({
|
|
1510
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
1561
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
1511
1562
|
* })
|
|
1512
1563
|
*
|
|
1513
1564
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1514
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
1565
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
1515
1566
|
* })
|
|
1516
1567
|
*
|
|
1517
1568
|
* // UserService depends on Database and Logger
|
|
@@ -1520,8 +1571,7 @@ const provideWith = (
|
|
|
1520
1571
|
* const logger = yield* Logger
|
|
1521
1572
|
*
|
|
1522
1573
|
* return {
|
|
1523
|
-
* getUser: (id: string)
|
|
1524
|
-
* Effect.gen(function*() {
|
|
1574
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
1525
1575
|
* yield* logger.log(`Looking up user ${id}`)
|
|
1526
1576
|
* const result = yield* database.query(
|
|
1527
1577
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -1556,30 +1606,30 @@ export const provide: {
|
|
|
1556
1606
|
*
|
|
1557
1607
|
* @example
|
|
1558
1608
|
* ```ts
|
|
1559
|
-
* import { Effect, Layer,
|
|
1609
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1560
1610
|
*
|
|
1561
|
-
* class Database extends
|
|
1611
|
+
* class Database extends Context.Service<Database, {
|
|
1562
1612
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1563
1613
|
* }>()("Database") {}
|
|
1564
1614
|
*
|
|
1565
|
-
* class UserService extends
|
|
1615
|
+
* class UserService extends Context.Service<UserService, {
|
|
1566
1616
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
1567
1617
|
* id: string
|
|
1568
1618
|
* name: string
|
|
1569
1619
|
* }>
|
|
1570
1620
|
* }>()("UserService") {}
|
|
1571
1621
|
*
|
|
1572
|
-
* class Logger extends
|
|
1622
|
+
* class Logger extends Context.Service<Logger, {
|
|
1573
1623
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1574
1624
|
* }>()("Logger") {}
|
|
1575
1625
|
*
|
|
1576
1626
|
* // Create dependency layers
|
|
1577
1627
|
* const databaseLayer = Layer.succeed(Database)({
|
|
1578
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
1628
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
1579
1629
|
* })
|
|
1580
1630
|
*
|
|
1581
1631
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1582
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
1632
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
1583
1633
|
* })
|
|
1584
1634
|
*
|
|
1585
1635
|
* // UserService depends on Database and Logger
|
|
@@ -1588,8 +1638,7 @@ export const provide: {
|
|
|
1588
1638
|
* const logger = yield* Logger
|
|
1589
1639
|
*
|
|
1590
1640
|
* return {
|
|
1591
|
-
* getUser: (id: string)
|
|
1592
|
-
* Effect.gen(function*() {
|
|
1641
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
1593
1642
|
* yield* logger.log(`Looking up user ${id}`)
|
|
1594
1643
|
* const result = yield* database.query(
|
|
1595
1644
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -1624,30 +1673,30 @@ export const provide: {
|
|
|
1624
1673
|
*
|
|
1625
1674
|
* @example
|
|
1626
1675
|
* ```ts
|
|
1627
|
-
* import { Effect, Layer,
|
|
1676
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1628
1677
|
*
|
|
1629
|
-
* class Database extends
|
|
1678
|
+
* class Database extends Context.Service<Database, {
|
|
1630
1679
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1631
1680
|
* }>()("Database") {}
|
|
1632
1681
|
*
|
|
1633
|
-
* class UserService extends
|
|
1682
|
+
* class UserService extends Context.Service<UserService, {
|
|
1634
1683
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
1635
1684
|
* id: string
|
|
1636
1685
|
* name: string
|
|
1637
1686
|
* }>
|
|
1638
1687
|
* }>()("UserService") {}
|
|
1639
1688
|
*
|
|
1640
|
-
* class Logger extends
|
|
1689
|
+
* class Logger extends Context.Service<Logger, {
|
|
1641
1690
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1642
1691
|
* }>()("Logger") {}
|
|
1643
1692
|
*
|
|
1644
1693
|
* // Create dependency layers
|
|
1645
1694
|
* const databaseLayer = Layer.succeed(Database)({
|
|
1646
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
1695
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
1647
1696
|
* })
|
|
1648
1697
|
*
|
|
1649
1698
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1650
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
1699
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
1651
1700
|
* })
|
|
1652
1701
|
*
|
|
1653
1702
|
* // UserService depends on Database and Logger
|
|
@@ -1656,8 +1705,7 @@ export const provide: {
|
|
|
1656
1705
|
* const logger = yield* Logger
|
|
1657
1706
|
*
|
|
1658
1707
|
* return {
|
|
1659
|
-
* getUser: (id: string)
|
|
1660
|
-
* Effect.gen(function*() {
|
|
1708
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
1661
1709
|
* yield* logger.log(`Looking up user ${id}`)
|
|
1662
1710
|
* const result = yield* database.query(
|
|
1663
1711
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -1699,30 +1747,30 @@ export const provide: {
|
|
|
1699
1747
|
*
|
|
1700
1748
|
* @example
|
|
1701
1749
|
* ```ts
|
|
1702
|
-
* import { Effect, Layer,
|
|
1750
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1703
1751
|
*
|
|
1704
|
-
* class Database extends
|
|
1752
|
+
* class Database extends Context.Service<Database, {
|
|
1705
1753
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1706
1754
|
* }>()("Database") {}
|
|
1707
1755
|
*
|
|
1708
|
-
* class UserService extends
|
|
1756
|
+
* class UserService extends Context.Service<UserService, {
|
|
1709
1757
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
1710
1758
|
* id: string
|
|
1711
1759
|
* name: string
|
|
1712
1760
|
* }>
|
|
1713
1761
|
* }>()("UserService") {}
|
|
1714
1762
|
*
|
|
1715
|
-
* class Logger extends
|
|
1763
|
+
* class Logger extends Context.Service<Logger, {
|
|
1716
1764
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1717
1765
|
* }>()("Logger") {}
|
|
1718
1766
|
*
|
|
1719
1767
|
* // Create dependency layers
|
|
1720
1768
|
* const databaseLayer = Layer.succeed(Database)({
|
|
1721
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
1769
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
1722
1770
|
* })
|
|
1723
1771
|
*
|
|
1724
1772
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1725
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
1773
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
1726
1774
|
* })
|
|
1727
1775
|
*
|
|
1728
1776
|
* // UserService depends on Database and Logger
|
|
@@ -1731,8 +1779,7 @@ export const provide: {
|
|
|
1731
1779
|
* const logger = yield* Logger
|
|
1732
1780
|
*
|
|
1733
1781
|
* return {
|
|
1734
|
-
* getUser: (id: string)
|
|
1735
|
-
* Effect.gen(function*() {
|
|
1782
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
1736
1783
|
* yield* logger.log(`Looking up user ${id}`)
|
|
1737
1784
|
* const result = yield* database.query(
|
|
1738
1785
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -1767,30 +1814,30 @@ export const provide: {
|
|
|
1767
1814
|
*
|
|
1768
1815
|
* @example
|
|
1769
1816
|
* ```ts
|
|
1770
|
-
* import { Effect, Layer,
|
|
1817
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1771
1818
|
*
|
|
1772
|
-
* class Database extends
|
|
1819
|
+
* class Database extends Context.Service<Database, {
|
|
1773
1820
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1774
1821
|
* }>()("Database") {}
|
|
1775
1822
|
*
|
|
1776
|
-
* class UserService extends
|
|
1823
|
+
* class UserService extends Context.Service<UserService, {
|
|
1777
1824
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
1778
1825
|
* id: string
|
|
1779
1826
|
* name: string
|
|
1780
1827
|
* }>
|
|
1781
1828
|
* }>()("UserService") {}
|
|
1782
1829
|
*
|
|
1783
|
-
* class Logger extends
|
|
1830
|
+
* class Logger extends Context.Service<Logger, {
|
|
1784
1831
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1785
1832
|
* }>()("Logger") {}
|
|
1786
1833
|
*
|
|
1787
1834
|
* // Create dependency layers
|
|
1788
1835
|
* const databaseLayer = Layer.succeed(Database)({
|
|
1789
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
1836
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
1790
1837
|
* })
|
|
1791
1838
|
*
|
|
1792
1839
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1793
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
1840
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
1794
1841
|
* })
|
|
1795
1842
|
*
|
|
1796
1843
|
* // UserService depends on Database and Logger
|
|
@@ -1799,8 +1846,7 @@ export const provide: {
|
|
|
1799
1846
|
* const logger = yield* Logger
|
|
1800
1847
|
*
|
|
1801
1848
|
* return {
|
|
1802
|
-
* getUser: (id: string)
|
|
1803
|
-
* Effect.gen(function*() {
|
|
1849
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
1804
1850
|
* yield* logger.log(`Looking up user ${id}`)
|
|
1805
1851
|
* const result = yield* database.query(
|
|
1806
1852
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -1845,17 +1891,17 @@ export const provide: {
|
|
|
1845
1891
|
*
|
|
1846
1892
|
* @example
|
|
1847
1893
|
* ```ts
|
|
1848
|
-
* import { Effect, Layer,
|
|
1894
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1849
1895
|
*
|
|
1850
|
-
* class Database extends
|
|
1896
|
+
* class Database extends Context.Service<Database, {
|
|
1851
1897
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1852
1898
|
* }>()("Database") {}
|
|
1853
1899
|
*
|
|
1854
|
-
* class Logger extends
|
|
1900
|
+
* class Logger extends Context.Service<Logger, {
|
|
1855
1901
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1856
1902
|
* }>()("Logger") {}
|
|
1857
1903
|
*
|
|
1858
|
-
* class UserService extends
|
|
1904
|
+
* class UserService extends Context.Service<UserService, {
|
|
1859
1905
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
1860
1906
|
* id: string
|
|
1861
1907
|
* name: string
|
|
@@ -1864,11 +1910,11 @@ export const provide: {
|
|
|
1864
1910
|
*
|
|
1865
1911
|
* // Create dependency layers
|
|
1866
1912
|
* const databaseLayer = Layer.succeed(Database)({
|
|
1867
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
1913
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
1868
1914
|
* })
|
|
1869
1915
|
*
|
|
1870
1916
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1871
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
1917
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
1872
1918
|
* })
|
|
1873
1919
|
*
|
|
1874
1920
|
* // UserService depends on Database and Logger
|
|
@@ -1877,8 +1923,7 @@ export const provide: {
|
|
|
1877
1923
|
* const logger = yield* Logger
|
|
1878
1924
|
*
|
|
1879
1925
|
* return {
|
|
1880
|
-
* getUser: (id: string)
|
|
1881
|
-
* Effect.gen(function*() {
|
|
1926
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
1882
1927
|
* yield* logger.log(`Looking up user ${id}`)
|
|
1883
1928
|
* const result = yield* database.query(
|
|
1884
1929
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -1919,17 +1964,17 @@ export const provideMerge: {
|
|
|
1919
1964
|
*
|
|
1920
1965
|
* @example
|
|
1921
1966
|
* ```ts
|
|
1922
|
-
* import { Effect, Layer,
|
|
1967
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1923
1968
|
*
|
|
1924
|
-
* class Database extends
|
|
1969
|
+
* class Database extends Context.Service<Database, {
|
|
1925
1970
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
1926
1971
|
* }>()("Database") {}
|
|
1927
1972
|
*
|
|
1928
|
-
* class Logger extends
|
|
1973
|
+
* class Logger extends Context.Service<Logger, {
|
|
1929
1974
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
1930
1975
|
* }>()("Logger") {}
|
|
1931
1976
|
*
|
|
1932
|
-
* class UserService extends
|
|
1977
|
+
* class UserService extends Context.Service<UserService, {
|
|
1933
1978
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
1934
1979
|
* id: string
|
|
1935
1980
|
* name: string
|
|
@@ -1938,11 +1983,11 @@ export const provideMerge: {
|
|
|
1938
1983
|
*
|
|
1939
1984
|
* // Create dependency layers
|
|
1940
1985
|
* const databaseLayer = Layer.succeed(Database)({
|
|
1941
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
1986
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
1942
1987
|
* })
|
|
1943
1988
|
*
|
|
1944
1989
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
1945
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
1990
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
1946
1991
|
* })
|
|
1947
1992
|
*
|
|
1948
1993
|
* // UserService depends on Database and Logger
|
|
@@ -1951,8 +1996,7 @@ export const provideMerge: {
|
|
|
1951
1996
|
* const logger = yield* Logger
|
|
1952
1997
|
*
|
|
1953
1998
|
* return {
|
|
1954
|
-
* getUser: (id: string)
|
|
1955
|
-
* Effect.gen(function*() {
|
|
1999
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
1956
2000
|
* yield* logger.log(`Looking up user ${id}`)
|
|
1957
2001
|
* const result = yield* database.query(
|
|
1958
2002
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -1993,17 +2037,17 @@ export const provideMerge: {
|
|
|
1993
2037
|
*
|
|
1994
2038
|
* @example
|
|
1995
2039
|
* ```ts
|
|
1996
|
-
* import { Effect, Layer,
|
|
2040
|
+
* import { Effect, Layer, Context } from "effect"
|
|
1997
2041
|
*
|
|
1998
|
-
* class Database extends
|
|
2042
|
+
* class Database extends Context.Service<Database, {
|
|
1999
2043
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2000
2044
|
* }>()("Database") {}
|
|
2001
2045
|
*
|
|
2002
|
-
* class Logger extends
|
|
2046
|
+
* class Logger extends Context.Service<Logger, {
|
|
2003
2047
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2004
2048
|
* }>()("Logger") {}
|
|
2005
2049
|
*
|
|
2006
|
-
* class UserService extends
|
|
2050
|
+
* class UserService extends Context.Service<UserService, {
|
|
2007
2051
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
2008
2052
|
* id: string
|
|
2009
2053
|
* name: string
|
|
@@ -2012,11 +2056,11 @@ export const provideMerge: {
|
|
|
2012
2056
|
*
|
|
2013
2057
|
* // Create dependency layers
|
|
2014
2058
|
* const databaseLayer = Layer.succeed(Database)({
|
|
2015
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
2059
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
2016
2060
|
* })
|
|
2017
2061
|
*
|
|
2018
2062
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
2019
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
2063
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
2020
2064
|
* })
|
|
2021
2065
|
*
|
|
2022
2066
|
* // UserService depends on Database and Logger
|
|
@@ -2025,8 +2069,7 @@ export const provideMerge: {
|
|
|
2025
2069
|
* const logger = yield* Logger
|
|
2026
2070
|
*
|
|
2027
2071
|
* return {
|
|
2028
|
-
* getUser: (id: string)
|
|
2029
|
-
* Effect.gen(function*() {
|
|
2072
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
2030
2073
|
* yield* logger.log(`Looking up user ${id}`)
|
|
2031
2074
|
* const result = yield* database.query(
|
|
2032
2075
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -2074,17 +2117,17 @@ export const provideMerge: {
|
|
|
2074
2117
|
*
|
|
2075
2118
|
* @example
|
|
2076
2119
|
* ```ts
|
|
2077
|
-
* import { Effect, Layer,
|
|
2120
|
+
* import { Effect, Layer, Context } from "effect"
|
|
2078
2121
|
*
|
|
2079
|
-
* class Database extends
|
|
2122
|
+
* class Database extends Context.Service<Database, {
|
|
2080
2123
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2081
2124
|
* }>()("Database") {}
|
|
2082
2125
|
*
|
|
2083
|
-
* class Logger extends
|
|
2126
|
+
* class Logger extends Context.Service<Logger, {
|
|
2084
2127
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2085
2128
|
* }>()("Logger") {}
|
|
2086
2129
|
*
|
|
2087
|
-
* class UserService extends
|
|
2130
|
+
* class UserService extends Context.Service<UserService, {
|
|
2088
2131
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
2089
2132
|
* id: string
|
|
2090
2133
|
* name: string
|
|
@@ -2093,11 +2136,11 @@ export const provideMerge: {
|
|
|
2093
2136
|
*
|
|
2094
2137
|
* // Create dependency layers
|
|
2095
2138
|
* const databaseLayer = Layer.succeed(Database)({
|
|
2096
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
2139
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
2097
2140
|
* })
|
|
2098
2141
|
*
|
|
2099
2142
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
2100
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
2143
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
2101
2144
|
* })
|
|
2102
2145
|
*
|
|
2103
2146
|
* // UserService depends on Database and Logger
|
|
@@ -2106,8 +2149,7 @@ export const provideMerge: {
|
|
|
2106
2149
|
* const logger = yield* Logger
|
|
2107
2150
|
*
|
|
2108
2151
|
* return {
|
|
2109
|
-
* getUser: (id: string)
|
|
2110
|
-
* Effect.gen(function*() {
|
|
2152
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
2111
2153
|
* yield* logger.log(`Looking up user ${id}`)
|
|
2112
2154
|
* const result = yield* database.query(
|
|
2113
2155
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -2148,17 +2190,17 @@ export const provideMerge: {
|
|
|
2148
2190
|
*
|
|
2149
2191
|
* @example
|
|
2150
2192
|
* ```ts
|
|
2151
|
-
* import { Effect, Layer,
|
|
2193
|
+
* import { Effect, Layer, Context } from "effect"
|
|
2152
2194
|
*
|
|
2153
|
-
* class Database extends
|
|
2195
|
+
* class Database extends Context.Service<Database, {
|
|
2154
2196
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2155
2197
|
* }>()("Database") {}
|
|
2156
2198
|
*
|
|
2157
|
-
* class Logger extends
|
|
2199
|
+
* class Logger extends Context.Service<Logger, {
|
|
2158
2200
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2159
2201
|
* }>()("Logger") {}
|
|
2160
2202
|
*
|
|
2161
|
-
* class UserService extends
|
|
2203
|
+
* class UserService extends Context.Service<UserService, {
|
|
2162
2204
|
* readonly getUser: (id: string) => Effect.Effect<{
|
|
2163
2205
|
* id: string
|
|
2164
2206
|
* name: string
|
|
@@ -2167,11 +2209,11 @@ export const provideMerge: {
|
|
|
2167
2209
|
*
|
|
2168
2210
|
* // Create dependency layers
|
|
2169
2211
|
* const databaseLayer = Layer.succeed(Database)({
|
|
2170
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
2212
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
2171
2213
|
* })
|
|
2172
2214
|
*
|
|
2173
2215
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
2174
|
-
* log: (msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`))
|
|
2216
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(`[LOG] ${msg}`)))
|
|
2175
2217
|
* })
|
|
2176
2218
|
*
|
|
2177
2219
|
* // UserService depends on Database and Logger
|
|
@@ -2180,8 +2222,7 @@ export const provideMerge: {
|
|
|
2180
2222
|
* const logger = yield* Logger
|
|
2181
2223
|
*
|
|
2182
2224
|
* return {
|
|
2183
|
-
* getUser: (id: string)
|
|
2184
|
-
* Effect.gen(function*() {
|
|
2225
|
+
* getUser: Effect.fn("UserService.getUser")(function*(id: string) {
|
|
2185
2226
|
* yield* logger.log(`Looking up user ${id}`)
|
|
2186
2227
|
* const result = yield* database.query(
|
|
2187
2228
|
* `SELECT * FROM users WHERE id = ${id}`
|
|
@@ -2227,7 +2268,7 @@ export const provideMerge: {
|
|
|
2227
2268
|
provideWith(
|
|
2228
2269
|
self,
|
|
2229
2270
|
that,
|
|
2230
|
-
(self, that) =>
|
|
2271
|
+
(self, that) => Context.merge(that, self)
|
|
2231
2272
|
))
|
|
2232
2273
|
|
|
2233
2274
|
/**
|
|
@@ -2235,18 +2276,18 @@ export const provideMerge: {
|
|
|
2235
2276
|
*
|
|
2236
2277
|
* @example
|
|
2237
2278
|
* ```ts
|
|
2238
|
-
* import { Effect, Layer,
|
|
2279
|
+
* import { Effect, Layer, Context } from "effect"
|
|
2239
2280
|
*
|
|
2240
|
-
* class Config extends
|
|
2281
|
+
* class Config extends Context.Service<Config, {
|
|
2241
2282
|
* readonly dbUrl: string
|
|
2242
2283
|
* readonly logLevel: string
|
|
2243
2284
|
* }>()("Config") {}
|
|
2244
2285
|
*
|
|
2245
|
-
* class Database extends
|
|
2286
|
+
* class Database extends Context.Service<Database, {
|
|
2246
2287
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2247
2288
|
* }>()("Database") {}
|
|
2248
2289
|
*
|
|
2249
|
-
* class Logger extends
|
|
2290
|
+
* class Logger extends Context.Service<Logger, {
|
|
2250
2291
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2251
2292
|
* }>()("Logger") {}
|
|
2252
2293
|
*
|
|
@@ -2258,23 +2299,24 @@ export const provideMerge: {
|
|
|
2258
2299
|
*
|
|
2259
2300
|
* // Dynamically create services based on config
|
|
2260
2301
|
* const dynamicServiceLayer = configLayer.pipe(
|
|
2261
|
-
* Layer.flatMap((
|
|
2262
|
-
* const config =
|
|
2302
|
+
* Layer.flatMap((context) => {
|
|
2303
|
+
* const config = Context.get(context, Config)
|
|
2263
2304
|
*
|
|
2264
2305
|
* // Create database layer based on config
|
|
2265
2306
|
* const dbLayer = Layer.succeed(Database)({
|
|
2266
|
-
* query: (sql: string) =>
|
|
2307
|
+
* query: Effect.fn("Database.query")((sql: string) =>
|
|
2267
2308
|
* Effect.succeed(
|
|
2268
2309
|
* `Querying ${config.dbUrl}: ${sql}`
|
|
2269
|
-
* )
|
|
2310
|
+
* ))
|
|
2270
2311
|
* })
|
|
2271
2312
|
*
|
|
2272
2313
|
* // Create logger layer based on config
|
|
2273
2314
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
2274
|
-
* log: (msg: string) =>
|
|
2315
|
+
* log: Effect.fn("Logger.log")((msg: string) =>
|
|
2275
2316
|
* config.logLevel === "debug"
|
|
2276
2317
|
* ? Effect.sync(() => console.log(`[DEBUG] ${msg}`))
|
|
2277
2318
|
* : Effect.sync(() => console.log(msg))
|
|
2319
|
+
* )
|
|
2278
2320
|
* })
|
|
2279
2321
|
*
|
|
2280
2322
|
* // Return combined layer
|
|
@@ -2305,18 +2347,18 @@ export const flatMap: {
|
|
|
2305
2347
|
*
|
|
2306
2348
|
* @example
|
|
2307
2349
|
* ```ts
|
|
2308
|
-
* import { Effect, Layer,
|
|
2350
|
+
* import { Effect, Layer, Context } from "effect"
|
|
2309
2351
|
*
|
|
2310
|
-
* class Config extends
|
|
2352
|
+
* class Config extends Context.Service<Config, {
|
|
2311
2353
|
* readonly dbUrl: string
|
|
2312
2354
|
* readonly logLevel: string
|
|
2313
2355
|
* }>()("Config") {}
|
|
2314
2356
|
*
|
|
2315
|
-
* class Database extends
|
|
2357
|
+
* class Database extends Context.Service<Database, {
|
|
2316
2358
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2317
2359
|
* }>()("Database") {}
|
|
2318
2360
|
*
|
|
2319
|
-
* class Logger extends
|
|
2361
|
+
* class Logger extends Context.Service<Logger, {
|
|
2320
2362
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2321
2363
|
* }>()("Logger") {}
|
|
2322
2364
|
*
|
|
@@ -2328,23 +2370,24 @@ export const flatMap: {
|
|
|
2328
2370
|
*
|
|
2329
2371
|
* // Dynamically create services based on config
|
|
2330
2372
|
* const dynamicServiceLayer = configLayer.pipe(
|
|
2331
|
-
* Layer.flatMap((
|
|
2332
|
-
* const config =
|
|
2373
|
+
* Layer.flatMap((context) => {
|
|
2374
|
+
* const config = Context.get(context, Config)
|
|
2333
2375
|
*
|
|
2334
2376
|
* // Create database layer based on config
|
|
2335
2377
|
* const dbLayer = Layer.succeed(Database)({
|
|
2336
|
-
* query: (sql: string) =>
|
|
2378
|
+
* query: Effect.fn("Database.query")((sql: string) =>
|
|
2337
2379
|
* Effect.succeed(
|
|
2338
2380
|
* `Querying ${config.dbUrl}: ${sql}`
|
|
2339
|
-
* )
|
|
2381
|
+
* ))
|
|
2340
2382
|
* })
|
|
2341
2383
|
*
|
|
2342
2384
|
* // Create logger layer based on config
|
|
2343
2385
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
2344
|
-
* log: (msg: string) =>
|
|
2386
|
+
* log: Effect.fn("Logger.log")((msg: string) =>
|
|
2345
2387
|
* config.logLevel === "debug"
|
|
2346
2388
|
* ? Effect.sync(() => console.log(`[DEBUG] ${msg}`))
|
|
2347
2389
|
* : Effect.sync(() => console.log(msg))
|
|
2390
|
+
* )
|
|
2348
2391
|
* })
|
|
2349
2392
|
*
|
|
2350
2393
|
* // Return combined layer
|
|
@@ -2369,24 +2412,24 @@ export const flatMap: {
|
|
|
2369
2412
|
* @since 2.0.0
|
|
2370
2413
|
* @category sequencing
|
|
2371
2414
|
*/
|
|
2372
|
-
<A, A2, E2, R2>(f: (context:
|
|
2415
|
+
<A, A2, E2, R2>(f: (context: Context.Context<A>) => Layer<A2, E2, R2>): <E, R>(self: Layer<A, E, R>) => Layer<A2, E2 | E, R2 | R>
|
|
2373
2416
|
/**
|
|
2374
2417
|
* Constructs a layer dynamically based on the output of this layer.
|
|
2375
2418
|
*
|
|
2376
2419
|
* @example
|
|
2377
2420
|
* ```ts
|
|
2378
|
-
* import { Effect, Layer,
|
|
2421
|
+
* import { Effect, Layer, Context } from "effect"
|
|
2379
2422
|
*
|
|
2380
|
-
* class Config extends
|
|
2423
|
+
* class Config extends Context.Service<Config, {
|
|
2381
2424
|
* readonly dbUrl: string
|
|
2382
2425
|
* readonly logLevel: string
|
|
2383
2426
|
* }>()("Config") {}
|
|
2384
2427
|
*
|
|
2385
|
-
* class Database extends
|
|
2428
|
+
* class Database extends Context.Service<Database, {
|
|
2386
2429
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2387
2430
|
* }>()("Database") {}
|
|
2388
2431
|
*
|
|
2389
|
-
* class Logger extends
|
|
2432
|
+
* class Logger extends Context.Service<Logger, {
|
|
2390
2433
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2391
2434
|
* }>()("Logger") {}
|
|
2392
2435
|
*
|
|
@@ -2398,23 +2441,24 @@ export const flatMap: {
|
|
|
2398
2441
|
*
|
|
2399
2442
|
* // Dynamically create services based on config
|
|
2400
2443
|
* const dynamicServiceLayer = configLayer.pipe(
|
|
2401
|
-
* Layer.flatMap((
|
|
2402
|
-
* const config =
|
|
2444
|
+
* Layer.flatMap((context) => {
|
|
2445
|
+
* const config = Context.get(context, Config)
|
|
2403
2446
|
*
|
|
2404
2447
|
* // Create database layer based on config
|
|
2405
2448
|
* const dbLayer = Layer.succeed(Database)({
|
|
2406
|
-
* query: (sql: string) =>
|
|
2449
|
+
* query: Effect.fn("Database.query")((sql: string) =>
|
|
2407
2450
|
* Effect.succeed(
|
|
2408
2451
|
* `Querying ${config.dbUrl}: ${sql}`
|
|
2409
|
-
* )
|
|
2452
|
+
* ))
|
|
2410
2453
|
* })
|
|
2411
2454
|
*
|
|
2412
2455
|
* // Create logger layer based on config
|
|
2413
2456
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
2414
|
-
* log: (msg: string) =>
|
|
2457
|
+
* log: Effect.fn("Logger.log")((msg: string) =>
|
|
2415
2458
|
* config.logLevel === "debug"
|
|
2416
2459
|
* ? Effect.sync(() => console.log(`[DEBUG] ${msg}`))
|
|
2417
2460
|
* : Effect.sync(() => console.log(msg))
|
|
2461
|
+
* )
|
|
2418
2462
|
* })
|
|
2419
2463
|
*
|
|
2420
2464
|
* // Return combined layer
|
|
@@ -2441,11 +2485,11 @@ export const flatMap: {
|
|
|
2441
2485
|
*/
|
|
2442
2486
|
<A, E, R, A2, E2, R2>(
|
|
2443
2487
|
self: Layer<A, E, R>,
|
|
2444
|
-
f: (context:
|
|
2488
|
+
f: (context: Context.Context<A>) => Layer<A2, E2, R2>
|
|
2445
2489
|
): Layer<A2, E | E2, R | R2>
|
|
2446
2490
|
} = dual(2, <A, E, R, A2, E2, R2>(
|
|
2447
2491
|
self: Layer<A, E, R>,
|
|
2448
|
-
f: (context:
|
|
2492
|
+
f: (context: Context.Context<A>) => Layer<A2, E2, R2>
|
|
2449
2493
|
): Layer<A2, E | E2, R | R2> =>
|
|
2450
2494
|
fromBuild((memoMap, scope) =>
|
|
2451
2495
|
internalEffect.flatMap(
|
|
@@ -2454,19 +2498,140 @@ export const flatMap: {
|
|
|
2454
2498
|
)
|
|
2455
2499
|
))
|
|
2456
2500
|
|
|
2501
|
+
/**
|
|
2502
|
+
* Performs the specified effect if this layer succeeds.
|
|
2503
|
+
*
|
|
2504
|
+
* @since 4.0.0
|
|
2505
|
+
* @category sequencing
|
|
2506
|
+
*/
|
|
2507
|
+
export const tap: {
|
|
2508
|
+
/**
|
|
2509
|
+
* Performs the specified effect if this layer succeeds.
|
|
2510
|
+
*
|
|
2511
|
+
* @since 4.0.0
|
|
2512
|
+
* @category sequencing
|
|
2513
|
+
*/
|
|
2514
|
+
<ROut, XR extends ROut, RIn2, E2, X>(f: (context: Context.Context<XR>) => Effect<X, E2, RIn2>): <RIn, E>(self: Layer<ROut, E, RIn>) => Layer<ROut, E | E2, RIn | Exclude<RIn2, Scope.Scope>>
|
|
2515
|
+
/**
|
|
2516
|
+
* Performs the specified effect if this layer succeeds.
|
|
2517
|
+
*
|
|
2518
|
+
* @since 4.0.0
|
|
2519
|
+
* @category sequencing
|
|
2520
|
+
*/
|
|
2521
|
+
<RIn, E, ROut, XR extends ROut, RIn2, E2, X>(
|
|
2522
|
+
self: Layer<ROut, E, RIn>,
|
|
2523
|
+
f: (context: Context.Context<XR>) => Effect<X, E2, RIn2>
|
|
2524
|
+
): Layer<ROut, E | E2, RIn | Exclude<RIn2, Scope.Scope>>
|
|
2525
|
+
} = dual(2, <RIn, E, ROut, XR extends ROut, RIn2, E2, X>(
|
|
2526
|
+
self: Layer<ROut, E, RIn>,
|
|
2527
|
+
f: (context: Context.Context<XR>) => Effect<X, E2, RIn2>
|
|
2528
|
+
): Layer<ROut, E | E2, RIn | Exclude<RIn2, Scope.Scope>> =>
|
|
2529
|
+
fromBuild((memoMap, scope) =>
|
|
2530
|
+
internalEffect.flatMap(
|
|
2531
|
+
self.build(memoMap, scope),
|
|
2532
|
+
(context) => Scope.provide(internalEffect.as(f(context as Context.Context<XR>), context), scope)
|
|
2533
|
+
)
|
|
2534
|
+
))
|
|
2535
|
+
|
|
2536
|
+
/**
|
|
2537
|
+
* Performs the specified effect if this layer fails.
|
|
2538
|
+
*
|
|
2539
|
+
* @since 4.0.0
|
|
2540
|
+
* @category sequencing
|
|
2541
|
+
*/
|
|
2542
|
+
export const tapError: {
|
|
2543
|
+
/**
|
|
2544
|
+
* Performs the specified effect if this layer fails.
|
|
2545
|
+
*
|
|
2546
|
+
* @since 4.0.0
|
|
2547
|
+
* @category sequencing
|
|
2548
|
+
*/
|
|
2549
|
+
<E, XE extends E, RIn2, E2, X>(f: (e: XE) => Effect<X, E2, RIn2>): <RIn, ROut>(self: Layer<ROut, E, RIn>) => Layer<ROut, E | E2, RIn | Exclude<RIn2, Scope.Scope>>
|
|
2550
|
+
/**
|
|
2551
|
+
* Performs the specified effect if this layer fails.
|
|
2552
|
+
*
|
|
2553
|
+
* @since 4.0.0
|
|
2554
|
+
* @category sequencing
|
|
2555
|
+
*/
|
|
2556
|
+
<RIn, E, XE extends E, ROut, RIn2, E2, X>(self: Layer<ROut, E, RIn>, f: (e: XE) => Effect<X, E2, RIn2>): Layer<ROut, E | E2, RIn | Exclude<RIn2, Scope.Scope>>
|
|
2557
|
+
} = dual(2, <RIn, E, XE extends E, ROut, RIn2, E2, X>(
|
|
2558
|
+
self: Layer<ROut, E, RIn>,
|
|
2559
|
+
f: (e: XE) => Effect<X, E2, RIn2>
|
|
2560
|
+
): Layer<ROut, E | E2, RIn | Exclude<RIn2, Scope.Scope>> =>
|
|
2561
|
+
fromBuild((memoMap, scope) =>
|
|
2562
|
+
internalEffect.catch_(
|
|
2563
|
+
self.build(memoMap, scope),
|
|
2564
|
+
(error) => Scope.provide(internalEffect.andThen(f(error as XE), internalEffect.fail(error)), scope)
|
|
2565
|
+
)
|
|
2566
|
+
))
|
|
2567
|
+
|
|
2568
|
+
/**
|
|
2569
|
+
* Performs the specified effect if this layer fails.
|
|
2570
|
+
*
|
|
2571
|
+
* **Previously Known As**
|
|
2572
|
+
*
|
|
2573
|
+
* This API replaces the following from Effect 3.x:
|
|
2574
|
+
*
|
|
2575
|
+
* - `Layer.tapErrorCause`
|
|
2576
|
+
*
|
|
2577
|
+
* @since 4.0.0
|
|
2578
|
+
* @category sequencing
|
|
2579
|
+
*/
|
|
2580
|
+
export const tapCause: {
|
|
2581
|
+
/**
|
|
2582
|
+
* Performs the specified effect if this layer fails.
|
|
2583
|
+
*
|
|
2584
|
+
* **Previously Known As**
|
|
2585
|
+
*
|
|
2586
|
+
* This API replaces the following from Effect 3.x:
|
|
2587
|
+
*
|
|
2588
|
+
* - `Layer.tapErrorCause`
|
|
2589
|
+
*
|
|
2590
|
+
* @since 4.0.0
|
|
2591
|
+
* @category sequencing
|
|
2592
|
+
*/
|
|
2593
|
+
<E, XE extends E, RIn2, E2, X>(f: (cause: Cause.Cause<XE>) => Effect<X, E2, RIn2>): <RIn, ROut>(self: Layer<ROut, E, RIn>) => Layer<ROut, E | E2, RIn | Exclude<RIn2, Scope.Scope>>
|
|
2594
|
+
/**
|
|
2595
|
+
* Performs the specified effect if this layer fails.
|
|
2596
|
+
*
|
|
2597
|
+
* **Previously Known As**
|
|
2598
|
+
*
|
|
2599
|
+
* This API replaces the following from Effect 3.x:
|
|
2600
|
+
*
|
|
2601
|
+
* - `Layer.tapErrorCause`
|
|
2602
|
+
*
|
|
2603
|
+
* @since 4.0.0
|
|
2604
|
+
* @category sequencing
|
|
2605
|
+
*/
|
|
2606
|
+
<RIn, E, XE extends E, ROut, RIn2, E2, X>(
|
|
2607
|
+
self: Layer<ROut, E, RIn>,
|
|
2608
|
+
f: (cause: Cause.Cause<XE>) => Effect<X, E2, RIn2>
|
|
2609
|
+
): Layer<ROut, E | E2, RIn | Exclude<RIn2, Scope.Scope>>
|
|
2610
|
+
} = dual(2, <RIn, E, XE extends E, ROut, RIn2, E2, X>(
|
|
2611
|
+
self: Layer<ROut, E, RIn>,
|
|
2612
|
+
f: (cause: Cause.Cause<XE>) => Effect<X, E2, RIn2>
|
|
2613
|
+
): Layer<ROut, E | E2, RIn | Exclude<RIn2, Scope.Scope>> =>
|
|
2614
|
+
fromBuild((memoMap, scope) =>
|
|
2615
|
+
internalEffect.catchCause(
|
|
2616
|
+
self.build(memoMap, scope),
|
|
2617
|
+
(cause) =>
|
|
2618
|
+
Scope.provide(internalEffect.andThen(f(cause as Cause.Cause<XE>), internalEffect.failCause(cause)), scope)
|
|
2619
|
+
)
|
|
2620
|
+
))
|
|
2621
|
+
|
|
2457
2622
|
/**
|
|
2458
2623
|
* Translates effect failure into death of the fiber, making all failures
|
|
2459
2624
|
* unchecked and not a part of the type of the layer.
|
|
2460
2625
|
*
|
|
2461
2626
|
* @example
|
|
2462
2627
|
* ```ts
|
|
2463
|
-
* import { Data, Effect, Layer,
|
|
2628
|
+
* import { Data, Effect, Layer, Context } from "effect"
|
|
2464
2629
|
*
|
|
2465
2630
|
* class DatabaseError extends Data.TaggedError("DatabaseError")<{
|
|
2466
2631
|
* message: string
|
|
2467
2632
|
* }> {}
|
|
2468
2633
|
*
|
|
2469
|
-
* class Database extends
|
|
2634
|
+
* class Database extends Context.Service<Database, {
|
|
2470
2635
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2471
2636
|
* }>()("Database") {}
|
|
2472
2637
|
*
|
|
@@ -2475,10 +2640,10 @@ export const flatMap: {
|
|
|
2475
2640
|
* // Simulate a database connection that might fail
|
|
2476
2641
|
* const shouldFail = Math.random() > 0.5
|
|
2477
2642
|
* if (shouldFail) {
|
|
2478
|
-
* yield*
|
|
2643
|
+
* return yield* new DatabaseError({ message: "Connection failed" })
|
|
2479
2644
|
* }
|
|
2480
2645
|
*
|
|
2481
|
-
* return { query: (sql: string) => Effect.succeed(`Result: ${sql}`) }
|
|
2646
|
+
* return { query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Result: ${sql}`)) }
|
|
2482
2647
|
* }))
|
|
2483
2648
|
*
|
|
2484
2649
|
* // Convert failures to fiber death - removes error from type
|
|
@@ -2536,11 +2701,11 @@ export {
|
|
|
2536
2701
|
*
|
|
2537
2702
|
* @example
|
|
2538
2703
|
* ```ts
|
|
2539
|
-
* import { Data, Effect, Layer,
|
|
2704
|
+
* import { Data, Effect, Layer, Context } from "effect"
|
|
2540
2705
|
*
|
|
2541
2706
|
* class ConfigError extends Data.TaggedError("ConfigError") {}
|
|
2542
2707
|
*
|
|
2543
|
-
* class Config extends
|
|
2708
|
+
* class Config extends Context.Service<Config, {
|
|
2544
2709
|
* readonly apiUrl: string
|
|
2545
2710
|
* }>()("Config") {}
|
|
2546
2711
|
*
|
|
@@ -2562,11 +2727,11 @@ export const catchTag: {
|
|
|
2562
2727
|
*
|
|
2563
2728
|
* @example
|
|
2564
2729
|
* ```ts
|
|
2565
|
-
* import { Data, Effect, Layer,
|
|
2730
|
+
* import { Data, Effect, Layer, Context } from "effect"
|
|
2566
2731
|
*
|
|
2567
2732
|
* class ConfigError extends Data.TaggedError("ConfigError") {}
|
|
2568
2733
|
*
|
|
2569
|
-
* class Config extends
|
|
2734
|
+
* class Config extends Context.Service<Config, {
|
|
2570
2735
|
* readonly apiUrl: string
|
|
2571
2736
|
* }>()("Config") {}
|
|
2572
2737
|
*
|
|
@@ -2599,11 +2764,11 @@ export const catchTag: {
|
|
|
2599
2764
|
*
|
|
2600
2765
|
* @example
|
|
2601
2766
|
* ```ts
|
|
2602
|
-
* import { Data, Effect, Layer,
|
|
2767
|
+
* import { Data, Effect, Layer, Context } from "effect"
|
|
2603
2768
|
*
|
|
2604
2769
|
* class ConfigError extends Data.TaggedError("ConfigError") {}
|
|
2605
2770
|
*
|
|
2606
|
-
* class Config extends
|
|
2771
|
+
* class Config extends Context.Service<Config, {
|
|
2607
2772
|
* readonly apiUrl: string
|
|
2608
2773
|
* }>()("Config") {}
|
|
2609
2774
|
*
|
|
@@ -2662,7 +2827,7 @@ export const catchTag: {
|
|
|
2662
2827
|
*
|
|
2663
2828
|
* @example
|
|
2664
2829
|
* ```ts
|
|
2665
|
-
* import { Data, Effect, Layer,
|
|
2830
|
+
* import { Data, Effect, Layer, Context } from "effect"
|
|
2666
2831
|
*
|
|
2667
2832
|
* class DatabaseError extends Data.TaggedError("DatabaseError")<{
|
|
2668
2833
|
* message: string
|
|
@@ -2672,18 +2837,18 @@ export const catchTag: {
|
|
|
2672
2837
|
* reason: string
|
|
2673
2838
|
* }> {}
|
|
2674
2839
|
*
|
|
2675
|
-
* class Database extends
|
|
2840
|
+
* class Database extends Context.Service<Database, {
|
|
2676
2841
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2677
2842
|
* }>()("Database") {}
|
|
2678
2843
|
*
|
|
2679
|
-
* class Logger extends
|
|
2844
|
+
* class Logger extends Context.Service<Logger, {
|
|
2680
2845
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2681
2846
|
* }>()("Logger") {}
|
|
2682
2847
|
*
|
|
2683
2848
|
* // Primary database layer that might fail
|
|
2684
2849
|
* const primaryDatabaseLayer = Layer.effect(Database)(Effect.gen(function*() {
|
|
2685
|
-
* yield*
|
|
2686
|
-
* return { query: (sql: string) => Effect.succeed(`Primary: ${sql}`) }
|
|
2850
|
+
* return yield* new DatabaseError({ message: "Primary DB unreachable" })
|
|
2851
|
+
* return { query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Primary: ${sql}`)) }
|
|
2687
2852
|
* }))
|
|
2688
2853
|
*
|
|
2689
2854
|
* // Fallback layers for different error causes
|
|
@@ -2692,11 +2857,12 @@ export const catchTag: {
|
|
|
2692
2857
|
* // For any cause/error, fallback to in-memory database
|
|
2693
2858
|
* return Layer.mergeAll(
|
|
2694
2859
|
* Layer.succeed(Database)({
|
|
2695
|
-
* query: (sql: string) => Effect.succeed(`Memory: ${sql}`)
|
|
2860
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Memory: ${sql}`))
|
|
2696
2861
|
* }),
|
|
2697
2862
|
* Layer.succeed(Logger)({
|
|
2698
|
-
* log: (msg: string) =>
|
|
2863
|
+
* log: Effect.fn("Logger.log")((msg: string) =>
|
|
2699
2864
|
* Effect.sync(() => console.log(`[FALLBACK] ${msg}`))
|
|
2865
|
+
* )
|
|
2700
2866
|
* })
|
|
2701
2867
|
* )
|
|
2702
2868
|
* })
|
|
@@ -2719,7 +2885,7 @@ export const catchCause: {
|
|
|
2719
2885
|
*
|
|
2720
2886
|
* @example
|
|
2721
2887
|
* ```ts
|
|
2722
|
-
* import { Data, Effect, Layer,
|
|
2888
|
+
* import { Data, Effect, Layer, Context } from "effect"
|
|
2723
2889
|
*
|
|
2724
2890
|
* class DatabaseError extends Data.TaggedError("DatabaseError")<{
|
|
2725
2891
|
* message: string
|
|
@@ -2729,18 +2895,18 @@ export const catchCause: {
|
|
|
2729
2895
|
* reason: string
|
|
2730
2896
|
* }> {}
|
|
2731
2897
|
*
|
|
2732
|
-
* class Database extends
|
|
2898
|
+
* class Database extends Context.Service<Database, {
|
|
2733
2899
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2734
2900
|
* }>()("Database") {}
|
|
2735
2901
|
*
|
|
2736
|
-
* class Logger extends
|
|
2902
|
+
* class Logger extends Context.Service<Logger, {
|
|
2737
2903
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2738
2904
|
* }>()("Logger") {}
|
|
2739
2905
|
*
|
|
2740
2906
|
* // Primary database layer that might fail
|
|
2741
2907
|
* const primaryDatabaseLayer = Layer.effect(Database)(Effect.gen(function*() {
|
|
2742
|
-
* yield*
|
|
2743
|
-
* return { query: (sql: string) => Effect.succeed(`Primary: ${sql}`) }
|
|
2908
|
+
* return yield* new DatabaseError({ message: "Primary DB unreachable" })
|
|
2909
|
+
* return { query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Primary: ${sql}`)) }
|
|
2744
2910
|
* }))
|
|
2745
2911
|
*
|
|
2746
2912
|
* // Fallback layers for different error causes
|
|
@@ -2749,11 +2915,12 @@ export const catchCause: {
|
|
|
2749
2915
|
* // For any cause/error, fallback to in-memory database
|
|
2750
2916
|
* return Layer.mergeAll(
|
|
2751
2917
|
* Layer.succeed(Database)({
|
|
2752
|
-
* query: (sql: string) => Effect.succeed(`Memory: ${sql}`)
|
|
2918
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Memory: ${sql}`))
|
|
2753
2919
|
* }),
|
|
2754
2920
|
* Layer.succeed(Logger)({
|
|
2755
|
-
* log: (msg: string) =>
|
|
2921
|
+
* log: Effect.fn("Logger.log")((msg: string) =>
|
|
2756
2922
|
* Effect.sync(() => console.log(`[FALLBACK] ${msg}`))
|
|
2923
|
+
* )
|
|
2757
2924
|
* })
|
|
2758
2925
|
* )
|
|
2759
2926
|
* })
|
|
@@ -2776,7 +2943,7 @@ export const catchCause: {
|
|
|
2776
2943
|
*
|
|
2777
2944
|
* @example
|
|
2778
2945
|
* ```ts
|
|
2779
|
-
* import { Data, Effect, Layer,
|
|
2946
|
+
* import { Data, Effect, Layer, Context } from "effect"
|
|
2780
2947
|
*
|
|
2781
2948
|
* class DatabaseError extends Data.TaggedError("DatabaseError")<{
|
|
2782
2949
|
* message: string
|
|
@@ -2786,18 +2953,18 @@ export const catchCause: {
|
|
|
2786
2953
|
* reason: string
|
|
2787
2954
|
* }> {}
|
|
2788
2955
|
*
|
|
2789
|
-
* class Database extends
|
|
2956
|
+
* class Database extends Context.Service<Database, {
|
|
2790
2957
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
2791
2958
|
* }>()("Database") {}
|
|
2792
2959
|
*
|
|
2793
|
-
* class Logger extends
|
|
2960
|
+
* class Logger extends Context.Service<Logger, {
|
|
2794
2961
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2795
2962
|
* }>()("Logger") {}
|
|
2796
2963
|
*
|
|
2797
2964
|
* // Primary database layer that might fail
|
|
2798
2965
|
* const primaryDatabaseLayer = Layer.effect(Database)(Effect.gen(function*() {
|
|
2799
|
-
* yield*
|
|
2800
|
-
* return { query: (sql: string) => Effect.succeed(`Primary: ${sql}`) }
|
|
2966
|
+
* return yield* new DatabaseError({ message: "Primary DB unreachable" })
|
|
2967
|
+
* return { query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Primary: ${sql}`)) }
|
|
2801
2968
|
* }))
|
|
2802
2969
|
*
|
|
2803
2970
|
* // Fallback layers for different error causes
|
|
@@ -2806,11 +2973,12 @@ export const catchCause: {
|
|
|
2806
2973
|
* // For any cause/error, fallback to in-memory database
|
|
2807
2974
|
* return Layer.mergeAll(
|
|
2808
2975
|
* Layer.succeed(Database)({
|
|
2809
|
-
* query: (sql: string) => Effect.succeed(`Memory: ${sql}`)
|
|
2976
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Memory: ${sql}`))
|
|
2810
2977
|
* }),
|
|
2811
2978
|
* Layer.succeed(Logger)({
|
|
2812
|
-
* log: (msg: string) =>
|
|
2979
|
+
* log: Effect.fn("Logger.log")((msg: string) =>
|
|
2813
2980
|
* Effect.sync(() => console.log(`[FALLBACK] ${msg}`))
|
|
2981
|
+
* )
|
|
2814
2982
|
* })
|
|
2815
2983
|
* )
|
|
2816
2984
|
* })
|
|
@@ -2879,7 +3047,7 @@ export const updateService: {
|
|
|
2879
3047
|
* @since 3.13.0
|
|
2880
3048
|
* @category utils
|
|
2881
3049
|
*/
|
|
2882
|
-
<I, A>(service:
|
|
3050
|
+
<I, A>(service: Context.Key<I, A>, f: (a: Types.NoInfer<A>) => A): <A1, E1, R1>(layer: Layer<A1, E1, R1>) => Layer<A1, E1, I | R1>
|
|
2883
3051
|
/**
|
|
2884
3052
|
* Updates a service in the context with a new implementation.
|
|
2885
3053
|
*
|
|
@@ -2900,16 +3068,16 @@ export const updateService: {
|
|
|
2900
3068
|
*/
|
|
2901
3069
|
<A1, E1, R1, I, A>(
|
|
2902
3070
|
layer: Layer<A1, E1, R1>,
|
|
2903
|
-
service:
|
|
2904
|
-
f: (a: A) => A
|
|
3071
|
+
service: Context.Key<I, A>,
|
|
3072
|
+
f: (a: Types.NoInfer<A>) => A
|
|
2905
3073
|
): Layer<A1, E1, I | R1>
|
|
2906
3074
|
} = dual(
|
|
2907
3075
|
3,
|
|
2908
3076
|
<A1, E1, R1, I, A>(
|
|
2909
3077
|
layer: Layer<A1, E1, R1>,
|
|
2910
|
-
service:
|
|
2911
|
-
f: (a: A) => A
|
|
2912
|
-
): Layer<A1, E1, I | R1> => provide(layer, effect(service
|
|
3078
|
+
service: Context.Key<I, A>,
|
|
3079
|
+
f: (a: Types.NoInfer<A>) => A
|
|
3080
|
+
): Layer<A1, E1, I | R1> => provide(layer, effect(service, internalEffect.map(service.asEffect(), f)))
|
|
2913
3081
|
)
|
|
2914
3082
|
|
|
2915
3083
|
/**
|
|
@@ -2917,9 +3085,9 @@ export const updateService: {
|
|
|
2917
3085
|
*
|
|
2918
3086
|
* @example
|
|
2919
3087
|
* ```ts
|
|
2920
|
-
* import { Effect, Layer, Ref,
|
|
3088
|
+
* import { Effect, Layer, Ref, Context } from "effect"
|
|
2921
3089
|
*
|
|
2922
|
-
* class Counter extends
|
|
3090
|
+
* class Counter extends Context.Service<Counter, {
|
|
2923
3091
|
* readonly count: number
|
|
2924
3092
|
* readonly increment: () => Effect.Effect<number>
|
|
2925
3093
|
* }>()("Counter") {}
|
|
@@ -2929,10 +3097,11 @@ export const updateService: {
|
|
|
2929
3097
|
* const ref = yield* Ref.make(0)
|
|
2930
3098
|
* return {
|
|
2931
3099
|
* count: 0,
|
|
2932
|
-
* increment: () =>
|
|
3100
|
+
* increment: Effect.fn("Counter.increment")(() =>
|
|
2933
3101
|
* Ref.update(ref, (n) => n + 1).pipe(
|
|
2934
3102
|
* Effect.flatMap(() => Ref.get(ref))
|
|
2935
3103
|
* )
|
|
3104
|
+
* )
|
|
2936
3105
|
* }
|
|
2937
3106
|
* }))
|
|
2938
3107
|
*
|
|
@@ -2971,14 +3140,14 @@ export const fresh = <A, E, R>(self: Layer<A, E, R>): Layer<A, E, R> =>
|
|
|
2971
3140
|
*
|
|
2972
3141
|
* @example
|
|
2973
3142
|
* ```ts
|
|
2974
|
-
* import { Console, Effect, Layer,
|
|
3143
|
+
* import { Console, Effect, Layer, Context } from "effect"
|
|
2975
3144
|
*
|
|
2976
|
-
* class HttpServer extends
|
|
3145
|
+
* class HttpServer extends Context.Service<HttpServer, {
|
|
2977
3146
|
* readonly start: () => Effect.Effect<string>
|
|
2978
3147
|
* readonly stop: () => Effect.Effect<string>
|
|
2979
3148
|
* }>()("HttpServer") {}
|
|
2980
3149
|
*
|
|
2981
|
-
* class Logger extends
|
|
3150
|
+
* class Logger extends Context.Service<Logger, {
|
|
2982
3151
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
2983
3152
|
* }>()("Logger") {}
|
|
2984
3153
|
*
|
|
@@ -2987,13 +3156,11 @@ export const fresh = <A, E, R>(self: Layer<A, E, R>): Layer<A, E, R> =>
|
|
|
2987
3156
|
* yield* Console.log("Starting HTTP server...")
|
|
2988
3157
|
*
|
|
2989
3158
|
* return {
|
|
2990
|
-
* start: ()
|
|
2991
|
-
* Effect.gen(function*() {
|
|
3159
|
+
* start: Effect.fn("HttpServer.start")(function*() {
|
|
2992
3160
|
* yield* Console.log("Server listening on port 3000")
|
|
2993
3161
|
* return "Server started"
|
|
2994
3162
|
* }),
|
|
2995
|
-
* stop: ()
|
|
2996
|
-
* Effect.gen(function*() {
|
|
3163
|
+
* stop: Effect.fn("HttpServer.stop")(function*() {
|
|
2997
3164
|
* yield* Console.log("Server stopped gracefully")
|
|
2998
3165
|
* return "Server stopped"
|
|
2999
3166
|
* })
|
|
@@ -3001,7 +3168,7 @@ export const fresh = <A, E, R>(self: Layer<A, E, R>): Layer<A, E, R> =>
|
|
|
3001
3168
|
* }))
|
|
3002
3169
|
*
|
|
3003
3170
|
* const loggerLayer = Layer.succeed(Logger)({
|
|
3004
|
-
* log: (msg: string) => Console.log(`[LOG] ${msg}`)
|
|
3171
|
+
* log: Effect.fn("Logger.log")((msg: string) => Console.log(`[LOG] ${msg}`))
|
|
3005
3172
|
* })
|
|
3006
3173
|
*
|
|
3007
3174
|
* // Application layer combining all services
|
|
@@ -3036,19 +3203,21 @@ export const launch = <RIn, E, ROut>(self: Layer<ROut, E, RIn>): Effect<never, E
|
|
|
3036
3203
|
*/
|
|
3037
3204
|
export type PartialEffectful<A extends object> = Types.Simplify<
|
|
3038
3205
|
& {
|
|
3039
|
-
[
|
|
3040
|
-
K in keyof A as A[K] extends Effect<any, any, any> | ((...args: any) => Effect<any, any, any>) ? K
|
|
3041
|
-
: never
|
|
3042
|
-
]?: A[K]
|
|
3206
|
+
[K in keyof A as A[K] extends AnyEffectOrStream ? K : never]?: A[K]
|
|
3043
3207
|
}
|
|
3044
3208
|
& {
|
|
3045
|
-
[
|
|
3046
|
-
K in keyof A as A[K] extends Effect<any, any, any> | ((...args: any) => Effect<any, any, any>) ? never
|
|
3047
|
-
: K
|
|
3048
|
-
]: A[K]
|
|
3209
|
+
[K in keyof A as A[K] extends AnyEffectOrStream ? never : K]: A[K]
|
|
3049
3210
|
}
|
|
3050
3211
|
>
|
|
3051
3212
|
|
|
3213
|
+
type AnyEffectOrStream =
|
|
3214
|
+
| Effect<any, any, any>
|
|
3215
|
+
| Stream.Stream<any, any, any>
|
|
3216
|
+
| Channel.Channel<any, any, any, any, any, any, any>
|
|
3217
|
+
| ((...args: any) => Effect<any, any, any>)
|
|
3218
|
+
| ((...args: any) => Stream.Stream<any, any, any>)
|
|
3219
|
+
| ((...args: any) => Channel.Channel<any, any, any, any, any, any, any>)
|
|
3220
|
+
|
|
3052
3221
|
/**
|
|
3053
3222
|
* Creates a mock layer for testing purposes. You can provide a partial
|
|
3054
3223
|
* implementation of the service, and any methods not provided will
|
|
@@ -3056,9 +3225,9 @@ export type PartialEffectful<A extends object> = Types.Simplify<
|
|
|
3056
3225
|
*
|
|
3057
3226
|
* @example
|
|
3058
3227
|
* ```ts
|
|
3059
|
-
* import { Effect, Layer,
|
|
3228
|
+
* import { Effect, Layer, Context } from "effect"
|
|
3060
3229
|
*
|
|
3061
|
-
* class UserService extends
|
|
3230
|
+
* class UserService extends Context.Service<UserService, {
|
|
3062
3231
|
* readonly config: { apiUrl: string }
|
|
3063
3232
|
* readonly getUser: (
|
|
3064
3233
|
* id: string
|
|
@@ -3071,7 +3240,7 @@ export type PartialEffectful<A extends object> = Types.Simplify<
|
|
|
3071
3240
|
* }>()("UserService") {}
|
|
3072
3241
|
*
|
|
3073
3242
|
* // Create a partial mock - only implement what you need for testing
|
|
3074
|
-
* const testUserLayer = Layer.mock(UserService
|
|
3243
|
+
* const testUserLayer = Layer.mock(UserService, {
|
|
3075
3244
|
* config: { apiUrl: "https://test-api.com" }, // Required - non-Effect property
|
|
3076
3245
|
* getUser: (id: string) => Effect.succeed({ id, name: "Test User" }) // Mock implementation
|
|
3077
3246
|
* // deleteUser and updateUser are omitted - will throw UnimplementedError if called
|
|
@@ -3095,27 +3264,142 @@ export type PartialEffectful<A extends object> = Types.Simplify<
|
|
|
3095
3264
|
* @since 4.0.0
|
|
3096
3265
|
* @category Testing
|
|
3097
3266
|
*/
|
|
3098
|
-
export const mock
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3105
|
-
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3267
|
+
export const mock: {
|
|
3268
|
+
/**
|
|
3269
|
+
* Creates a mock layer for testing purposes. You can provide a partial
|
|
3270
|
+
* implementation of the service, and any methods not provided will
|
|
3271
|
+
* throw an unimplemented defect when called.
|
|
3272
|
+
*
|
|
3273
|
+
* @example
|
|
3274
|
+
* ```ts
|
|
3275
|
+
* import { Effect, Layer, Context } from "effect"
|
|
3276
|
+
*
|
|
3277
|
+
* class UserService extends Context.Service<UserService, {
|
|
3278
|
+
* readonly config: { apiUrl: string }
|
|
3279
|
+
* readonly getUser: (
|
|
3280
|
+
* id: string
|
|
3281
|
+
* ) => Effect.Effect<{ id: string; name: string }, Error>
|
|
3282
|
+
* readonly deleteUser: (id: string) => Effect.Effect<void, Error>
|
|
3283
|
+
* readonly updateUser: (
|
|
3284
|
+
* id: string,
|
|
3285
|
+
* data: object
|
|
3286
|
+
* ) => Effect.Effect<{ id: string; name: string }, Error>
|
|
3287
|
+
* }>()("UserService") {}
|
|
3288
|
+
*
|
|
3289
|
+
* // Create a partial mock - only implement what you need for testing
|
|
3290
|
+
* const testUserLayer = Layer.mock(UserService, {
|
|
3291
|
+
* config: { apiUrl: "https://test-api.com" }, // Required - non-Effect property
|
|
3292
|
+
* getUser: (id: string) => Effect.succeed({ id, name: "Test User" }) // Mock implementation
|
|
3293
|
+
* // deleteUser and updateUser are omitted - will throw UnimplementedError if called
|
|
3294
|
+
* })
|
|
3295
|
+
*
|
|
3296
|
+
* // Use in tests
|
|
3297
|
+
* const testProgram = Effect.gen(function*() {
|
|
3298
|
+
* const userService = yield* UserService
|
|
3299
|
+
*
|
|
3300
|
+
* // This works - we provided an implementation
|
|
3301
|
+
* const user = yield* userService.getUser("123")
|
|
3302
|
+
* console.log(user.name) // "Test User"
|
|
3303
|
+
*
|
|
3304
|
+
* // This would throw - we didn't implement deleteUser
|
|
3305
|
+
* // yield* userService.deleteUser("123") // UnimplementedError
|
|
3306
|
+
* }).pipe(
|
|
3307
|
+
* Effect.provide(testUserLayer)
|
|
3308
|
+
* )
|
|
3309
|
+
* ```
|
|
3310
|
+
*
|
|
3311
|
+
* @since 4.0.0
|
|
3312
|
+
* @category Testing
|
|
3313
|
+
*/
|
|
3314
|
+
<I, S extends object>(service: Context.Key<I, S>): (implementation: PartialEffectful<S>) => Layer<I>
|
|
3315
|
+
/**
|
|
3316
|
+
* Creates a mock layer for testing purposes. You can provide a partial
|
|
3317
|
+
* implementation of the service, and any methods not provided will
|
|
3318
|
+
* throw an unimplemented defect when called.
|
|
3319
|
+
*
|
|
3320
|
+
* @example
|
|
3321
|
+
* ```ts
|
|
3322
|
+
* import { Effect, Layer, Context } from "effect"
|
|
3323
|
+
*
|
|
3324
|
+
* class UserService extends Context.Service<UserService, {
|
|
3325
|
+
* readonly config: { apiUrl: string }
|
|
3326
|
+
* readonly getUser: (
|
|
3327
|
+
* id: string
|
|
3328
|
+
* ) => Effect.Effect<{ id: string; name: string }, Error>
|
|
3329
|
+
* readonly deleteUser: (id: string) => Effect.Effect<void, Error>
|
|
3330
|
+
* readonly updateUser: (
|
|
3331
|
+
* id: string,
|
|
3332
|
+
* data: object
|
|
3333
|
+
* ) => Effect.Effect<{ id: string; name: string }, Error>
|
|
3334
|
+
* }>()("UserService") {}
|
|
3335
|
+
*
|
|
3336
|
+
* // Create a partial mock - only implement what you need for testing
|
|
3337
|
+
* const testUserLayer = Layer.mock(UserService, {
|
|
3338
|
+
* config: { apiUrl: "https://test-api.com" }, // Required - non-Effect property
|
|
3339
|
+
* getUser: (id: string) => Effect.succeed({ id, name: "Test User" }) // Mock implementation
|
|
3340
|
+
* // deleteUser and updateUser are omitted - will throw UnimplementedError if called
|
|
3341
|
+
* })
|
|
3342
|
+
*
|
|
3343
|
+
* // Use in tests
|
|
3344
|
+
* const testProgram = Effect.gen(function*() {
|
|
3345
|
+
* const userService = yield* UserService
|
|
3346
|
+
*
|
|
3347
|
+
* // This works - we provided an implementation
|
|
3348
|
+
* const user = yield* userService.getUser("123")
|
|
3349
|
+
* console.log(user.name) // "Test User"
|
|
3350
|
+
*
|
|
3351
|
+
* // This would throw - we didn't implement deleteUser
|
|
3352
|
+
* // yield* userService.deleteUser("123") // UnimplementedError
|
|
3353
|
+
* }).pipe(
|
|
3354
|
+
* Effect.provide(testUserLayer)
|
|
3355
|
+
* )
|
|
3356
|
+
* ```
|
|
3357
|
+
*
|
|
3358
|
+
* @since 4.0.0
|
|
3359
|
+
* @category Testing
|
|
3360
|
+
*/
|
|
3361
|
+
<I, S extends object>(
|
|
3362
|
+
service: Context.Key<I, S>,
|
|
3363
|
+
implementation: Types.NoInfer<PartialEffectful<S>>
|
|
3364
|
+
): Layer<I>
|
|
3365
|
+
} = function() {
|
|
3366
|
+
if (arguments.length === 1) {
|
|
3367
|
+
return (implementation: any) => mockImpl(arguments[0], implementation)
|
|
3368
|
+
}
|
|
3369
|
+
return mockImpl(arguments[0], arguments[1])
|
|
3370
|
+
} as any
|
|
3371
|
+
|
|
3372
|
+
const mockImpl = <I, S extends object>(service: Context.Key<I, S>, implementation: PartialEffectful<S>): Layer<I> =>
|
|
3373
|
+
succeed(service)(
|
|
3374
|
+
new Proxy({ ...implementation as object } as S, {
|
|
3375
|
+
get(target, prop, _receiver) {
|
|
3376
|
+
if (prop in target) {
|
|
3377
|
+
return target[prop as keyof S]
|
|
3378
|
+
}
|
|
3379
|
+
const prevLimit = (Error as ErrorWithStackTraceLimit).stackTraceLimit
|
|
3380
|
+
;(Error as ErrorWithStackTraceLimit).stackTraceLimit = 2
|
|
3381
|
+
const error = new Error(`${service.key}: Unimplemented method "${prop.toString()}"`)
|
|
3382
|
+
;(Error as ErrorWithStackTraceLimit).stackTraceLimit = prevLimit
|
|
3383
|
+
error.name = "UnimplementedError"
|
|
3384
|
+
return makeUnimplemented(error)
|
|
3385
|
+
},
|
|
3386
|
+
has: constTrue
|
|
3387
|
+
})
|
|
3388
|
+
)
|
|
3116
3389
|
|
|
3117
3390
|
const makeUnimplemented = (error: globalThis.Error) => {
|
|
3118
|
-
const dead = internalEffect.die(error)
|
|
3391
|
+
const dead = Object.assign(internalEffect.die(error), {
|
|
3392
|
+
[StreamTypeId]: StreamTypeId,
|
|
3393
|
+
channel: {
|
|
3394
|
+
[ChannelTypeId]: ChannelTypeId,
|
|
3395
|
+
transform: () => internalEffect.succeed(dead),
|
|
3396
|
+
pipe() {
|
|
3397
|
+
return pipeArguments(this, arguments)
|
|
3398
|
+
}
|
|
3399
|
+
},
|
|
3400
|
+
[ChannelTypeId]: ChannelTypeId,
|
|
3401
|
+
transform: () => internalEffect.succeed(dead)
|
|
3402
|
+
})
|
|
3119
3403
|
function unimplemented() {
|
|
3120
3404
|
return dead
|
|
3121
3405
|
}
|
|
@@ -3125,6 +3409,9 @@ const makeUnimplemented = (error: globalThis.Error) => {
|
|
|
3125
3409
|
return unimplemented
|
|
3126
3410
|
}
|
|
3127
3411
|
|
|
3412
|
+
const StreamTypeId: Stream.TypeId = "~effect/Stream"
|
|
3413
|
+
const ChannelTypeId: Channel.TypeId = "~effect/Channel"
|
|
3414
|
+
|
|
3128
3415
|
// -----------------------------------------------------------------------------
|
|
3129
3416
|
// Type constraints
|
|
3130
3417
|
// -----------------------------------------------------------------------------
|
|
@@ -3254,9 +3541,9 @@ export interface SpanOptions extends Tracer.SpanOptions {
|
|
|
3254
3541
|
*
|
|
3255
3542
|
* @example
|
|
3256
3543
|
* ```ts
|
|
3257
|
-
* import { Console, Effect, Layer,
|
|
3544
|
+
* import { Console, Effect, Layer, Context, type Tracer } from "effect"
|
|
3258
3545
|
*
|
|
3259
|
-
* class Database extends
|
|
3546
|
+
* class Database extends Context.Service<Database, {
|
|
3260
3547
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
3261
3548
|
* }>()("Database") {}
|
|
3262
3549
|
*
|
|
@@ -3272,7 +3559,7 @@ export interface SpanOptions extends Tracer.SpanOptions {
|
|
|
3272
3559
|
* yield* Console.log((parentSpan as Tracer.Span).name) // "database-init"
|
|
3273
3560
|
*
|
|
3274
3561
|
* return {
|
|
3275
|
-
* query: (sql: string) => Effect.succeed(`Result: ${sql}`)
|
|
3562
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Result: ${sql}`))
|
|
3276
3563
|
* }
|
|
3277
3564
|
* })).pipe(Layer.provide(Layer.span("database-init")))
|
|
3278
3565
|
*
|
|
@@ -3315,9 +3602,9 @@ export const span = (
|
|
|
3315
3602
|
*
|
|
3316
3603
|
* @example
|
|
3317
3604
|
* ```ts
|
|
3318
|
-
* import { Console, Effect, Layer,
|
|
3605
|
+
* import { Console, Effect, Layer, Context, Tracer } from "effect"
|
|
3319
3606
|
*
|
|
3320
|
-
* class Database extends
|
|
3607
|
+
* class Database extends Context.Service<Database, {
|
|
3321
3608
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
3322
3609
|
* }>()("Database") {}
|
|
3323
3610
|
*
|
|
@@ -3331,7 +3618,7 @@ export const span = (
|
|
|
3331
3618
|
* yield* Console.log(parentSpan.spanId) // "42"
|
|
3332
3619
|
*
|
|
3333
3620
|
* return {
|
|
3334
|
-
* query: (sql: string) => Effect.succeed(`Result: ${sql}`)
|
|
3621
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Result: ${sql}`))
|
|
3335
3622
|
* }
|
|
3336
3623
|
* })
|
|
3337
3624
|
* ).pipe(Layer.provide(Layer.parentSpan(Tracer.externalSpan({
|
|
@@ -3344,7 +3631,7 @@ export const span = (
|
|
|
3344
3631
|
* @category tracing
|
|
3345
3632
|
*/
|
|
3346
3633
|
export const parentSpan = (span: Tracer.AnySpan): Layer<Tracer.ParentSpan> =>
|
|
3347
|
-
|
|
3634
|
+
succeedContext(Tracer.ParentSpan.context(span))
|
|
3348
3635
|
|
|
3349
3636
|
/**
|
|
3350
3637
|
* Wraps a Layer with a new tracing span, making all operations in the layer
|
|
@@ -3356,13 +3643,13 @@ export const parentSpan = (span: Tracer.AnySpan): Layer<Tracer.ParentSpan> =>
|
|
|
3356
3643
|
*
|
|
3357
3644
|
* @example
|
|
3358
3645
|
* ```ts
|
|
3359
|
-
* import { Effect, Layer,
|
|
3646
|
+
* import { Effect, Layer, Context } from "effect"
|
|
3360
3647
|
*
|
|
3361
|
-
* class Database extends
|
|
3648
|
+
* class Database extends Context.Service<Database, {
|
|
3362
3649
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
3363
3650
|
* }>()("Database") {}
|
|
3364
3651
|
*
|
|
3365
|
-
* class Logger extends
|
|
3652
|
+
* class Logger extends Context.Service<Logger, {
|
|
3366
3653
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
3367
3654
|
* }>()("Logger") {}
|
|
3368
3655
|
*
|
|
@@ -3371,14 +3658,14 @@ export const parentSpan = (span: Tracer.AnySpan): Layer<Tracer.ParentSpan> =>
|
|
|
3371
3658
|
* yield* Effect.log("Connecting to database")
|
|
3372
3659
|
* yield* Effect.sleep("100 millis")
|
|
3373
3660
|
* return {
|
|
3374
|
-
* query: (sql: string) => Effect.succeed(`Result: ${sql}`)
|
|
3661
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Result: ${sql}`))
|
|
3375
3662
|
* }
|
|
3376
3663
|
* })).pipe(Layer.withSpan("database-initialization", {
|
|
3377
3664
|
* attributes: { dbType: "postgres" }
|
|
3378
3665
|
* }))
|
|
3379
3666
|
*
|
|
3380
3667
|
* const loggerLayer = Layer.succeed(Logger, {
|
|
3381
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
3668
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
3382
3669
|
* }).pipe(Layer.withSpan("logger-initialization"))
|
|
3383
3670
|
*
|
|
3384
3671
|
* // Combine traced layers
|
|
@@ -3415,13 +3702,13 @@ export const withSpan: {
|
|
|
3415
3702
|
*
|
|
3416
3703
|
* @example
|
|
3417
3704
|
* ```ts
|
|
3418
|
-
* import { Effect, Layer,
|
|
3705
|
+
* import { Effect, Layer, Context } from "effect"
|
|
3419
3706
|
*
|
|
3420
|
-
* class Database extends
|
|
3707
|
+
* class Database extends Context.Service<Database, {
|
|
3421
3708
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
3422
3709
|
* }>()("Database") {}
|
|
3423
3710
|
*
|
|
3424
|
-
* class Logger extends
|
|
3711
|
+
* class Logger extends Context.Service<Logger, {
|
|
3425
3712
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
3426
3713
|
* }>()("Logger") {}
|
|
3427
3714
|
*
|
|
@@ -3430,14 +3717,14 @@ export const withSpan: {
|
|
|
3430
3717
|
* yield* Effect.log("Connecting to database")
|
|
3431
3718
|
* yield* Effect.sleep("100 millis")
|
|
3432
3719
|
* return {
|
|
3433
|
-
* query: (sql: string) => Effect.succeed(`Result: ${sql}`)
|
|
3720
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Result: ${sql}`))
|
|
3434
3721
|
* }
|
|
3435
3722
|
* })).pipe(Layer.withSpan("database-initialization", {
|
|
3436
3723
|
* attributes: { dbType: "postgres" }
|
|
3437
3724
|
* }))
|
|
3438
3725
|
*
|
|
3439
3726
|
* const loggerLayer = Layer.succeed(Logger, {
|
|
3440
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
3727
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
3441
3728
|
* }).pipe(Layer.withSpan("logger-initialization"))
|
|
3442
3729
|
*
|
|
3443
3730
|
* // Combine traced layers
|
|
@@ -3476,13 +3763,13 @@ export const withSpan: {
|
|
|
3476
3763
|
*
|
|
3477
3764
|
* @example
|
|
3478
3765
|
* ```ts
|
|
3479
|
-
* import { Effect, Layer,
|
|
3766
|
+
* import { Effect, Layer, Context } from "effect"
|
|
3480
3767
|
*
|
|
3481
|
-
* class Database extends
|
|
3768
|
+
* class Database extends Context.Service<Database, {
|
|
3482
3769
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
3483
3770
|
* }>()("Database") {}
|
|
3484
3771
|
*
|
|
3485
|
-
* class Logger extends
|
|
3772
|
+
* class Logger extends Context.Service<Logger, {
|
|
3486
3773
|
* readonly log: (msg: string) => Effect.Effect<void>
|
|
3487
3774
|
* }>()("Logger") {}
|
|
3488
3775
|
*
|
|
@@ -3491,14 +3778,14 @@ export const withSpan: {
|
|
|
3491
3778
|
* yield* Effect.log("Connecting to database")
|
|
3492
3779
|
* yield* Effect.sleep("100 millis")
|
|
3493
3780
|
* return {
|
|
3494
|
-
* query: (sql: string) => Effect.succeed(`Result: ${sql}`)
|
|
3781
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`Result: ${sql}`))
|
|
3495
3782
|
* }
|
|
3496
3783
|
* })).pipe(Layer.withSpan("database-initialization", {
|
|
3497
3784
|
* attributes: { dbType: "postgres" }
|
|
3498
3785
|
* }))
|
|
3499
3786
|
*
|
|
3500
3787
|
* const loggerLayer = Layer.succeed(Logger, {
|
|
3501
|
-
* log: (msg: string) => Effect.sync(() => console.log(msg))
|
|
3788
|
+
* log: Effect.fn("Logger.log")((msg: string) => Effect.sync(() => console.log(msg)))
|
|
3502
3789
|
* }).pipe(Layer.withSpan("logger-initialization"))
|
|
3503
3790
|
*
|
|
3504
3791
|
* // Combine traced layers
|
|
@@ -3566,13 +3853,13 @@ export const withSpan: {
|
|
|
3566
3853
|
*
|
|
3567
3854
|
* @example
|
|
3568
3855
|
* ```ts
|
|
3569
|
-
* import { Effect, Layer,
|
|
3856
|
+
* import { Effect, Layer, Context, Tracer } from "effect"
|
|
3570
3857
|
*
|
|
3571
|
-
* class Database extends
|
|
3858
|
+
* class Database extends Context.Service<Database, {
|
|
3572
3859
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
3573
3860
|
* }>()("Database") {}
|
|
3574
3861
|
*
|
|
3575
|
-
* class Cache extends
|
|
3862
|
+
* class Cache extends Context.Service<Cache, {
|
|
3576
3863
|
* readonly get: (key: string) => Effect.Effect<string | null>
|
|
3577
3864
|
* }>()("Cache") {}
|
|
3578
3865
|
*
|
|
@@ -3580,14 +3867,14 @@ export const withSpan: {
|
|
|
3580
3867
|
* const DatabaseLayer = Layer.effect(Database, Effect.gen(function*() {
|
|
3581
3868
|
* yield* Effect.log("Connecting to database")
|
|
3582
3869
|
* return {
|
|
3583
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
3870
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
3584
3871
|
* }
|
|
3585
3872
|
* }))
|
|
3586
3873
|
*
|
|
3587
3874
|
* const CacheLayer = Layer.effect(Cache, Effect.gen(function*() {
|
|
3588
3875
|
* yield* Effect.log("Connecting to cache")
|
|
3589
3876
|
* return {
|
|
3590
|
-
* get: (key: string) => Effect.succeed(`Cache: ${key}`)
|
|
3877
|
+
* get: Effect.fn("Cache.get")((key: string) => Effect.succeed(`Cache: ${key}`))
|
|
3591
3878
|
* }
|
|
3592
3879
|
* }))
|
|
3593
3880
|
*
|
|
@@ -3601,9 +3888,9 @@ export const withSpan: {
|
|
|
3601
3888
|
* Layer.withParentSpan(parentSpan)
|
|
3602
3889
|
* )
|
|
3603
3890
|
*
|
|
3604
|
-
* const
|
|
3605
|
-
* const database =
|
|
3606
|
-
* const cache =
|
|
3891
|
+
* const context = yield* Layer.build(AppLayer)
|
|
3892
|
+
* const database = Context.get(context, Database)
|
|
3893
|
+
* const cache = Context.get(context, Cache)
|
|
3607
3894
|
*
|
|
3608
3895
|
* const dbResult = yield* database.query("SELECT * FROM users")
|
|
3609
3896
|
* const cacheResult = yield* cache.get("user:123")
|
|
@@ -3626,13 +3913,13 @@ export const withParentSpan: {
|
|
|
3626
3913
|
*
|
|
3627
3914
|
* @example
|
|
3628
3915
|
* ```ts
|
|
3629
|
-
* import { Effect, Layer,
|
|
3916
|
+
* import { Effect, Layer, Context, Tracer } from "effect"
|
|
3630
3917
|
*
|
|
3631
|
-
* class Database extends
|
|
3918
|
+
* class Database extends Context.Service<Database, {
|
|
3632
3919
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
3633
3920
|
* }>()("Database") {}
|
|
3634
3921
|
*
|
|
3635
|
-
* class Cache extends
|
|
3922
|
+
* class Cache extends Context.Service<Cache, {
|
|
3636
3923
|
* readonly get: (key: string) => Effect.Effect<string | null>
|
|
3637
3924
|
* }>()("Cache") {}
|
|
3638
3925
|
*
|
|
@@ -3640,14 +3927,14 @@ export const withParentSpan: {
|
|
|
3640
3927
|
* const DatabaseLayer = Layer.effect(Database, Effect.gen(function*() {
|
|
3641
3928
|
* yield* Effect.log("Connecting to database")
|
|
3642
3929
|
* return {
|
|
3643
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
3930
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
3644
3931
|
* }
|
|
3645
3932
|
* }))
|
|
3646
3933
|
*
|
|
3647
3934
|
* const CacheLayer = Layer.effect(Cache, Effect.gen(function*() {
|
|
3648
3935
|
* yield* Effect.log("Connecting to cache")
|
|
3649
3936
|
* return {
|
|
3650
|
-
* get: (key: string) => Effect.succeed(`Cache: ${key}`)
|
|
3937
|
+
* get: Effect.fn("Cache.get")((key: string) => Effect.succeed(`Cache: ${key}`))
|
|
3651
3938
|
* }
|
|
3652
3939
|
* }))
|
|
3653
3940
|
*
|
|
@@ -3661,9 +3948,9 @@ export const withParentSpan: {
|
|
|
3661
3948
|
* Layer.withParentSpan(parentSpan)
|
|
3662
3949
|
* )
|
|
3663
3950
|
*
|
|
3664
|
-
* const
|
|
3665
|
-
* const database =
|
|
3666
|
-
* const cache =
|
|
3951
|
+
* const context = yield* Layer.build(AppLayer)
|
|
3952
|
+
* const database = Context.get(context, Database)
|
|
3953
|
+
* const cache = Context.get(context, Cache)
|
|
3667
3954
|
*
|
|
3668
3955
|
* const dbResult = yield* database.query("SELECT * FROM users")
|
|
3669
3956
|
* const cacheResult = yield* cache.get("user:123")
|
|
@@ -3688,13 +3975,13 @@ export const withParentSpan: {
|
|
|
3688
3975
|
*
|
|
3689
3976
|
* @example
|
|
3690
3977
|
* ```ts
|
|
3691
|
-
* import { Effect, Layer,
|
|
3978
|
+
* import { Effect, Layer, Context, Tracer } from "effect"
|
|
3692
3979
|
*
|
|
3693
|
-
* class Database extends
|
|
3980
|
+
* class Database extends Context.Service<Database, {
|
|
3694
3981
|
* readonly query: (sql: string) => Effect.Effect<string>
|
|
3695
3982
|
* }>()("Database") {}
|
|
3696
3983
|
*
|
|
3697
|
-
* class Cache extends
|
|
3984
|
+
* class Cache extends Context.Service<Cache, {
|
|
3698
3985
|
* readonly get: (key: string) => Effect.Effect<string | null>
|
|
3699
3986
|
* }>()("Cache") {}
|
|
3700
3987
|
*
|
|
@@ -3702,14 +3989,14 @@ export const withParentSpan: {
|
|
|
3702
3989
|
* const DatabaseLayer = Layer.effect(Database, Effect.gen(function*() {
|
|
3703
3990
|
* yield* Effect.log("Connecting to database")
|
|
3704
3991
|
* return {
|
|
3705
|
-
* query: (sql: string) => Effect.succeed(`DB: ${sql}`)
|
|
3992
|
+
* query: Effect.fn("Database.query")((sql: string) => Effect.succeed(`DB: ${sql}`))
|
|
3706
3993
|
* }
|
|
3707
3994
|
* }))
|
|
3708
3995
|
*
|
|
3709
3996
|
* const CacheLayer = Layer.effect(Cache, Effect.gen(function*() {
|
|
3710
3997
|
* yield* Effect.log("Connecting to cache")
|
|
3711
3998
|
* return {
|
|
3712
|
-
* get: (key: string) => Effect.succeed(`Cache: ${key}`)
|
|
3999
|
+
* get: Effect.fn("Cache.get")((key: string) => Effect.succeed(`Cache: ${key}`))
|
|
3713
4000
|
* }
|
|
3714
4001
|
* }))
|
|
3715
4002
|
*
|
|
@@ -3723,9 +4010,9 @@ export const withParentSpan: {
|
|
|
3723
4010
|
* Layer.withParentSpan(parentSpan)
|
|
3724
4011
|
* )
|
|
3725
4012
|
*
|
|
3726
|
-
* const
|
|
3727
|
-
* const database =
|
|
3728
|
-
* const cache =
|
|
4013
|
+
* const context = yield* Layer.build(AppLayer)
|
|
4014
|
+
* const database = Context.get(context, Database)
|
|
4015
|
+
* const cache = Context.get(context, Cache)
|
|
3729
4016
|
*
|
|
3730
4017
|
* const dbResult = yield* database.query("SELECT * FROM users")
|
|
3731
4018
|
* const cacheResult = yield* cache.get("user:123")
|