effect 4.0.0-beta.2 → 4.0.0-beta.21
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 +127 -299
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +102 -62
- package/dist/Array.js.map +1 -1
- package/dist/Cache.d.ts +2 -2
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +6 -5
- package/dist/Cache.js.map +1 -1
- package/dist/Cause.d.ts +1 -1
- package/dist/Cause.d.ts.map +1 -1
- package/dist/Channel.d.ts +116 -30
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +82 -37
- package/dist/Channel.js.map +1 -1
- package/dist/Chunk.d.ts +54 -247
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +36 -67
- package/dist/Chunk.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 +165 -9
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +62 -7
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts +1 -1
- package/dist/Cron.d.ts +1 -1
- package/dist/Data.d.ts +534 -365
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js +132 -79
- package/dist/Data.js.map +1 -1
- package/dist/DateTime.d.ts +23 -161
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +6 -51
- package/dist/DateTime.js.map +1 -1
- package/dist/Duration.d.ts +12 -12
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +12 -12
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +829 -692
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +263 -251
- package/dist/Effect.js.map +1 -1
- package/dist/Encoding.d.ts +194 -0
- package/dist/Encoding.d.ts.map +1 -0
- package/dist/Encoding.js +352 -0
- package/dist/Encoding.js.map +1 -0
- package/dist/Equal.d.ts +276 -109
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +124 -48
- package/dist/Equal.js.map +1 -1
- package/dist/ErrorReporter.d.ts +376 -0
- package/dist/ErrorReporter.d.ts.map +1 -0
- package/dist/ErrorReporter.js +246 -0
- package/dist/ErrorReporter.js.map +1 -0
- package/dist/Fiber.d.ts +2 -2
- package/dist/Fiber.d.ts.map +1 -1
- package/dist/Fiber.js.map +1 -1
- package/dist/FileSystem.d.ts +1 -1
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +5 -5
- package/dist/FileSystem.js.map +1 -1
- package/dist/Filter.d.ts +30 -34
- package/dist/Filter.d.ts.map +1 -1
- package/dist/Filter.js +15 -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 +229 -51
- package/dist/Formatter.js.map +1 -1
- package/dist/Graph.d.ts +1 -1
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js +5 -8
- package/dist/Graph.js.map +1 -1
- package/dist/HashMap.d.ts +15 -14
- package/dist/HashMap.d.ts.map +1 -1
- package/dist/HashMap.js +4 -4
- package/dist/HashMap.js.map +1 -1
- package/dist/Iterable.d.ts +40 -39
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +94 -22
- 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 +109 -0
- package/dist/Latch.d.ts.map +1 -0
- package/dist/Latch.js +72 -0
- package/dist/Latch.js.map +1 -0
- package/dist/Layer.d.ts +9 -9
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMap.d.ts +4 -4
- package/dist/LayerMap.d.ts.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 +29 -95
- 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 +1 -1
- package/dist/ManagedRuntime.js +1 -1
- package/dist/Metric.d.ts +2 -2
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +1 -1
- package/dist/Metric.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 +22 -15
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +14 -7
- package/dist/Option.js.map +1 -1
- package/dist/Pipeable.d.ts +17 -0
- package/dist/Pipeable.d.ts.map +1 -1
- package/dist/Pipeable.js +19 -1
- package/dist/Pipeable.js.map +1 -1
- package/dist/PlatformError.d.ts +10 -9
- package/dist/PlatformError.d.ts.map +1 -1
- package/dist/PlatformError.js +2 -2
- package/dist/PlatformError.js.map +1 -1
- package/dist/Pool.d.ts +6 -4
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +7 -5
- package/dist/Pool.js.map +1 -1
- package/dist/PubSub.d.ts +3 -2
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +3 -2
- 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.map +1 -1
- package/dist/Queue.js +0 -1
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts +35 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +46 -12
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +2 -2
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +1 -1
- 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 +24 -120
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +21 -41
- package/dist/Record.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 +3 -3
- package/dist/References.d.ts.map +1 -1
- package/dist/Request.d.ts +1 -1
- package/dist/Request.d.ts.map +1 -1
- package/dist/Request.js +2 -1
- package/dist/Request.js.map +1 -1
- package/dist/RequestResolver.d.ts +6 -26
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +0 -20
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Result.d.ts +12 -0
- package/dist/Result.d.ts.map +1 -1
- package/dist/Result.js +12 -0
- package/dist/Result.js.map +1 -1
- package/dist/Schedule.d.ts +47 -20
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +94 -34
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +266 -50
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +426 -74
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +7 -6
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +2 -2
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +12 -14
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaParser.d.ts +5 -0
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +10 -0
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +44 -43
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +43 -24
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +107 -3
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +159 -4
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/ScopedCache.d.ts +2 -2
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +1 -1
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +211 -0
- package/dist/Semaphore.d.ts.map +1 -0
- package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
- package/dist/Semaphore.js.map +1 -0
- package/dist/ServiceMap.d.ts +39 -30
- package/dist/ServiceMap.d.ts.map +1 -1
- package/dist/ServiceMap.js +3 -3
- package/dist/ServiceMap.js.map +1 -1
- package/dist/Sink.d.ts +13 -13
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +53 -6
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts +235 -423
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +124 -77
- package/dist/Stream.js.map +1 -1
- package/dist/Struct.d.ts +16 -0
- package/dist/Struct.d.ts.map +1 -1
- package/dist/Struct.js +22 -0
- package/dist/Struct.js.map +1 -1
- package/dist/SubscriptionRef.d.ts +2 -1
- package/dist/SubscriptionRef.d.ts.map +1 -1
- package/dist/SubscriptionRef.js +2 -1
- package/dist/SubscriptionRef.js.map +1 -1
- package/dist/SynchronizedRef.d.ts +2 -1
- package/dist/SynchronizedRef.d.ts.map +1 -1
- package/dist/SynchronizedRef.js +2 -1
- package/dist/SynchronizedRef.js.map +1 -1
- package/dist/Trie.d.ts +18 -17
- package/dist/Trie.d.ts.map +1 -1
- package/dist/Trie.js +5 -5
- package/dist/Trie.js.map +1 -1
- package/dist/TxChunk.d.ts +37 -37
- package/dist/TxChunk.d.ts.map +1 -1
- package/dist/TxChunk.js +3 -3
- 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 +196 -0
- package/dist/TxDeferred.js.map +1 -0
- package/dist/TxHashMap.d.ts +84 -83
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js +24 -24
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts +35 -35
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js +14 -14
- 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 +415 -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 +32 -32
- package/dist/TxQueue.d.ts.map +1 -1
- package/dist/TxQueue.js +26 -26
- package/dist/TxQueue.js.map +1 -1
- package/dist/TxReentrantLock.d.ts +523 -0
- package/dist/TxReentrantLock.d.ts.map +1 -0
- package/dist/TxReentrantLock.js +504 -0
- package/dist/TxReentrantLock.js.map +1 -0
- package/dist/TxRef.d.ts +34 -34
- package/dist/TxRef.d.ts.map +1 -1
- package/dist/TxRef.js +21 -14
- package/dist/TxRef.js.map +1 -1
- package/dist/TxSemaphore.d.ts +8 -8
- package/dist/TxSemaphore.d.ts.map +1 -1
- package/dist/TxSemaphore.js +7 -7
- 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 +84 -6
- package/dist/Types.d.ts.map +1 -1
- package/dist/index.d.ts +591 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +591 -20
- package/dist/index.js.map +1 -1
- package/dist/internal/core.js +11 -3
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +3 -11
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +263 -99
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/hashMap.js +5 -4
- package/dist/internal/hashMap.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 +3 -2
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/request.js +2 -2
- package/dist/internal/request.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/schema.js +1 -0
- package/dist/internal/schema/schema.js.map +1 -1
- package/dist/internal/trie.js +5 -4
- package/dist/internal/trie.js.map +1 -1
- package/dist/testing/TestClock.d.ts +7 -6
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +6 -4
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +8 -8
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/unstable/ai/AiError.d.ts +128 -48
- package/dist/unstable/ai/AiError.d.ts.map +1 -1
- package/dist/unstable/ai/AiError.js +11 -12
- package/dist/unstable/ai/AiError.js.map +1 -1
- package/dist/unstable/ai/Chat.d.ts +3 -3
- package/dist/unstable/ai/Chat.d.ts.map +1 -1
- package/dist/unstable/ai/Chat.js +4 -3
- package/dist/unstable/ai/Chat.js.map +1 -1
- package/dist/unstable/ai/LanguageModel.d.ts +4 -2
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/LanguageModel.js +86 -14
- package/dist/unstable/ai/LanguageModel.js.map +1 -1
- package/dist/unstable/ai/McpSchema.d.ts +163 -87
- package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
- package/dist/unstable/ai/McpSchema.js +49 -12
- package/dist/unstable/ai/McpSchema.js.map +1 -1
- package/dist/unstable/ai/McpServer.d.ts +1 -1
- package/dist/unstable/ai/McpServer.d.ts.map +1 -1
- package/dist/unstable/ai/McpServer.js +35 -7
- package/dist/unstable/ai/McpServer.js.map +1 -1
- package/dist/unstable/ai/Model.d.ts +25 -7
- package/dist/unstable/ai/Model.d.ts.map +1 -1
- package/dist/unstable/ai/Model.js +22 -6
- package/dist/unstable/ai/Model.js.map +1 -1
- package/dist/unstable/ai/Prompt.d.ts +20 -20
- package/dist/unstable/ai/Prompt.d.ts.map +1 -1
- package/dist/unstable/ai/Response.d.ts +26 -26
- package/dist/unstable/ai/Response.d.ts.map +1 -1
- package/dist/unstable/ai/Response.js +1 -1
- package/dist/unstable/ai/Response.js.map +1 -1
- package/dist/unstable/ai/Tool.d.ts +19 -3
- package/dist/unstable/ai/Tool.d.ts.map +1 -1
- package/dist/unstable/ai/Tool.js +14 -9
- package/dist/unstable/ai/Tool.js.map +1 -1
- package/dist/unstable/ai/index.d.ts +1 -1
- package/dist/unstable/ai/index.js +1 -1
- package/dist/unstable/cli/CliError.d.ts +5 -5
- package/dist/unstable/cli/CliOutput.js +59 -6
- package/dist/unstable/cli/CliOutput.js.map +1 -1
- package/dist/unstable/cli/Command.d.ts +276 -19
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +234 -36
- package/dist/unstable/cli/Command.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 +70 -2
- package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
- package/dist/unstable/cli/index.d.ts +4 -0
- package/dist/unstable/cli/index.d.ts.map +1 -1
- package/dist/unstable/cli/index.js +4 -0
- package/dist/unstable/cli/index.js.map +1 -1
- package/dist/unstable/cli/internal/command.d.ts +17 -8
- package/dist/unstable/cli/internal/command.d.ts.map +1 -1
- package/dist/unstable/cli/internal/command.js +32 -23
- package/dist/unstable/cli/internal/command.js.map +1 -1
- package/dist/unstable/cli/internal/completions/CommandDescriptor.js +7 -2
- package/dist/unstable/cli/internal/completions/CommandDescriptor.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 +107 -0
- package/dist/unstable/cli/internal/help.js.map +1 -0
- package/dist/unstable/cli/internal/parser.js +29 -36
- 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/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.js +4 -3
- package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/unstable/cluster/Entity.d.ts +7 -6
- package/dist/unstable/cluster/Entity.d.ts.map +1 -1
- package/dist/unstable/cluster/Entity.js.map +1 -1
- package/dist/unstable/cluster/EntityResource.d.ts +2 -2
- package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
- package/dist/unstable/cluster/Envelope.d.ts +1 -1
- package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
- package/dist/unstable/cluster/K8sHttpClient.js +4 -4
- package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
- package/dist/unstable/cluster/Message.d.ts +10 -10
- package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/MessageStorage.js +2 -1
- package/dist/unstable/cluster/MessageStorage.js.map +1 -1
- package/dist/unstable/cluster/Reply.d.ts +6 -6
- package/dist/unstable/cluster/Runner.d.ts +1 -1
- package/dist/unstable/cluster/Runners.d.ts.map +1 -1
- package/dist/unstable/cluster/Runners.js +4 -3
- package/dist/unstable/cluster/Runners.js.map +1 -1
- package/dist/unstable/cluster/Sharding.d.ts +2 -2
- package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
- package/dist/unstable/cluster/Sharding.js +9 -7
- package/dist/unstable/cluster/Sharding.js.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
- package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.js +20 -20
- package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/internal/entityManager.js +5 -4
- package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
- package/dist/unstable/cluster/internal/entityReaper.js +2 -1
- package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
- package/dist/unstable/cluster/internal/resourceRef.js +2 -1
- package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
- package/dist/unstable/encoding/Msgpack.d.ts +1 -1
- package/dist/unstable/encoding/Ndjson.d.ts +1 -1
- package/dist/unstable/encoding/Sse.d.ts +4 -4
- 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/EventJournal.d.ts +2 -2
- package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLog.js +2 -1
- package/dist/unstable/eventlog/EventLog.js.map +1 -1
- package/dist/unstable/eventlog/EventLogRemote.d.ts +6 -6
- package/dist/unstable/http/Cookies.d.ts +3 -3
- package/dist/unstable/http/Cookies.d.ts.map +1 -1
- package/dist/unstable/http/Cookies.js +2 -2
- package/dist/unstable/http/Cookies.js.map +1 -1
- package/dist/unstable/http/Headers.d.ts.map +1 -1
- package/dist/unstable/http/Headers.js +27 -10
- package/dist/unstable/http/Headers.js.map +1 -1
- package/dist/unstable/http/HttpBody.d.ts +17 -2
- package/dist/unstable/http/HttpBody.d.ts.map +1 -1
- package/dist/unstable/http/HttpBody.js +28 -1
- package/dist/unstable/http/HttpBody.js.map +1 -1
- package/dist/unstable/http/HttpClient.d.ts +37 -13
- package/dist/unstable/http/HttpClient.d.ts.map +1 -1
- package/dist/unstable/http/HttpClient.js +4 -4
- package/dist/unstable/http/HttpClient.js.map +1 -1
- package/dist/unstable/http/HttpClientError.d.ts +7 -7
- package/dist/unstable/http/HttpClientRequest.d.ts +27 -11
- package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientRequest.js +15 -3
- package/dist/unstable/http/HttpClientRequest.js.map +1 -1
- package/dist/unstable/http/HttpEffect.d.ts +3 -8
- package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
- package/dist/unstable/http/HttpEffect.js +42 -56
- package/dist/unstable/http/HttpEffect.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 +1 -6
- package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/unstable/http/HttpMiddleware.js +8 -17
- package/dist/unstable/http/HttpMiddleware.js.map +1 -1
- package/dist/unstable/http/HttpServerError.d.ts +20 -33
- package/dist/unstable/http/HttpServerError.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerError.js +37 -44
- package/dist/unstable/http/HttpServerError.js.map +1 -1
- package/dist/unstable/http/HttpServerRequest.d.ts +1 -1
- package/dist/unstable/http/HttpServerRequest.d.ts.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 +2 -1
- package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerResponse.js +3 -1
- package/dist/unstable/http/HttpServerResponse.js.map +1 -1
- package/dist/unstable/http/Multipart.d.ts +3 -3
- package/dist/unstable/http/UrlParams.d.ts +14 -6
- package/dist/unstable/http/UrlParams.d.ts.map +1 -1
- package/dist/unstable/http/UrlParams.js +1 -1
- package/dist/unstable/http/UrlParams.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 +3 -3
- package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApi.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts +11 -5
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.js +23 -12
- package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.d.ts +7 -2
- package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.js +3 -3
- package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +31 -44
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.js +15 -24
- package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.d.ts +11 -0
- package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.js +29 -9
- package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.d.ts +3 -3
- package/dist/unstable/httpapi/HttpApiGroup.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +4 -4
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
- package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSecurity.d.ts +2 -2
- package/dist/unstable/httpapi/HttpApiSecurity.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiSecurity.js.map +1 -1
- package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/OpenApi.js +32 -21
- 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 +1 -1
- 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/OtlpTracer.d.ts +4 -4
- package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/unstable/persistence/KeyValueStore.d.ts +1 -1
- package/dist/unstable/persistence/KeyValueStore.js +6 -6
- 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/PersistedCache.d.ts +6 -5
- package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedCache.js +2 -1
- package/dist/unstable/persistence/PersistedCache.js.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
- package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.js +12 -11
- package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
- package/dist/unstable/persistence/Persistence.d.ts +1 -1
- package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
- package/dist/unstable/persistence/Persistence.js +2 -2
- package/dist/unstable/persistence/Persistence.js.map +1 -1
- package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
- package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/unstable/persistence/RateLimiter.js +1 -1
- package/dist/unstable/persistence/RateLimiter.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 +45 -7
- package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.js +21 -1
- package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
- package/dist/unstable/reactivity/Atom.d.ts +10 -10
- package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +16 -13
- package/dist/unstable/reactivity/Atom.js.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts +8 -8
- package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.js +3 -3
- package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/unstable/reactivity/AtomRegistry.d.ts +6 -0
- package/dist/unstable/reactivity/AtomRegistry.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRegistry.js +24 -7
- package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.js +1 -1
- package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
- package/dist/unstable/reactivity/Hydration.d.ts +39 -0
- package/dist/unstable/reactivity/Hydration.d.ts.map +1 -0
- package/dist/unstable/reactivity/Hydration.js +76 -0
- package/dist/unstable/reactivity/Hydration.js.map +1 -0
- package/dist/unstable/reactivity/index.d.ts +4 -0
- package/dist/unstable/reactivity/index.d.ts.map +1 -1
- package/dist/unstable/reactivity/index.js +4 -0
- package/dist/unstable/reactivity/index.js.map +1 -1
- package/dist/unstable/rpc/Rpc.d.ts +4 -4
- package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
- package/dist/unstable/rpc/Rpc.js.map +1 -1
- package/dist/unstable/rpc/RpcClient.d.ts +5 -26
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +6 -13
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- package/dist/unstable/rpc/RpcGroup.d.ts +2 -2
- package/dist/unstable/rpc/RpcGroup.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcGroup.js.map +1 -1
- package/dist/unstable/rpc/RpcMiddleware.d.ts +3 -3
- package/dist/unstable/rpc/RpcMiddleware.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcMiddleware.js.map +1 -1
- package/dist/unstable/rpc/RpcSchema.d.ts +13 -0
- package/dist/unstable/rpc/RpcSchema.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcSchema.js +14 -0
- package/dist/unstable/rpc/RpcSchema.js.map +1 -1
- package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcSerialization.js +34 -9
- package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts +0 -7
- package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +15 -15
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/dist/unstable/rpc/Utils.d.ts.map +1 -1
- package/dist/unstable/rpc/Utils.js +2 -1
- package/dist/unstable/rpc/Utils.js.map +1 -1
- package/dist/unstable/schema/Model.d.ts +1 -1
- package/dist/unstable/schema/Model.d.ts.map +1 -1
- package/dist/unstable/schema/VariantSchema.d.ts +3 -3
- package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
- package/dist/unstable/schema/VariantSchema.js +3 -3
- package/dist/unstable/schema/VariantSchema.js.map +1 -1
- package/dist/unstable/socket/Socket.d.ts +4 -4
- package/dist/unstable/socket/Socket.d.ts.map +1 -1
- package/dist/unstable/socket/Socket.js +6 -5
- package/dist/unstable/socket/Socket.js.map +1 -1
- package/dist/unstable/socket/SocketServer.d.ts +3 -3
- package/dist/unstable/sql/Migrator.d.ts +1 -1
- package/dist/unstable/sql/SqlClient.d.ts +1 -1
- package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
- package/dist/unstable/sql/SqlError.d.ts +14 -14
- package/dist/unstable/sql/SqlError.d.ts.map +1 -1
- package/dist/unstable/sql/SqlError.js +9 -3
- package/dist/unstable/sql/SqlError.js.map +1 -1
- package/dist/unstable/sql/SqlModel.d.ts +2 -2
- package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
- package/dist/unstable/sql/SqlModel.js +3 -3
- package/dist/unstable/sql/SqlModel.js.map +1 -1
- package/dist/unstable/sql/SqlSchema.d.ts +16 -5
- 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.js +0 -1
- package/dist/unstable/sql/Statement.js.map +1 -1
- package/dist/unstable/workers/Worker.d.ts.map +1 -1
- package/dist/unstable/workers/Worker.js +2 -1
- package/dist/unstable/workers/Worker.js.map +1 -1
- package/dist/unstable/workflow/DurableClock.d.ts +3 -3
- package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
- package/dist/unstable/workflow/DurableClock.js +3 -3
- package/dist/unstable/workflow/DurableClock.js.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.js +2 -2
- package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
- package/dist/unstable/workflow/Workflow.d.ts +3 -3
- package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
- package/dist/unstable/workflow/Workflow.js +1 -1
- package/dist/unstable/workflow/Workflow.js.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.d.ts +12 -1
- package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.js +137 -1
- package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +2 -2
- package/src/Array.ts +190 -342
- package/src/Cache.ts +9 -8
- package/src/Cause.ts +1 -1
- package/src/Channel.ts +554 -138
- package/src/Chunk.ts +81 -268
- package/src/Combiner.ts +280 -13
- package/src/Config.ts +183 -21
- package/src/Data.ts +538 -374
- package/src/DateTime.ts +24 -164
- package/src/Duration.ts +15 -15
- package/src/Effect.ts +991 -800
- package/src/Encoding.ts +879 -0
- package/src/Equal.ts +278 -111
- package/src/ErrorReporter.ts +459 -0
- package/src/Fiber.ts +9 -2
- package/src/FileSystem.ts +7 -8
- package/src/Filter.ts +48 -58
- package/src/Formatter.ts +253 -51
- package/src/Graph.ts +24 -11
- package/src/HashMap.ts +15 -14
- package/src/Iterable.ts +105 -50
- package/src/JsonSchema.ts +383 -10
- package/src/Latch.ts +112 -0
- package/src/Layer.ts +11 -15
- package/src/LayerMap.ts +5 -5
- package/src/LogLevel.ts +37 -0
- package/src/Logger.ts +33 -100
- package/src/ManagedRuntime.ts +1 -1
- package/src/Metric.ts +4 -4
- package/src/Optic.ts +948 -19
- package/src/Option.ts +30 -20
- package/src/Pipeable.ts +32 -1
- package/src/PlatformError.ts +5 -5
- package/src/Pool.ts +13 -11
- package/src/PubSub.ts +10 -9
- package/src/Pull.ts +1 -1
- package/src/Queue.ts +0 -1
- package/src/Random.ts +51 -14
- package/src/RcMap.ts +5 -5
- package/src/RcRef.ts +1 -1
- package/src/Record.ts +43 -152
- package/src/Reducer.ts +166 -7
- package/src/References.ts +4 -4
- package/src/Request.ts +3 -2
- package/src/RequestResolver.ts +9 -29
- package/src/Result.ts +13 -0
- package/src/Schedule.ts +318 -160
- package/src/Schema.ts +661 -116
- package/src/SchemaAST.ts +7 -6
- package/src/SchemaGetter.ts +12 -14
- package/src/SchemaParser.ts +11 -0
- package/src/SchemaRepresentation.ts +43 -24
- package/src/SchemaTransformation.ts +189 -4
- package/src/ScopedCache.ts +3 -3
- package/src/Semaphore.ts +356 -0
- package/src/ServiceMap.ts +47 -38
- package/src/Sink.ts +78 -26
- package/src/Stream.ts +566 -601
- package/src/Struct.ts +26 -0
- package/src/SubscriptionRef.ts +3 -2
- package/src/SynchronizedRef.ts +3 -2
- package/src/Trie.ts +18 -17
- package/src/TxChunk.ts +72 -53
- package/src/TxDeferred.ts +394 -0
- package/src/TxHashMap.ts +332 -285
- package/src/TxHashSet.ts +111 -116
- package/src/TxPriorityQueue.ts +767 -0
- package/src/TxPubSub.ts +789 -0
- package/src/TxQueue.ts +241 -251
- package/src/TxReentrantLock.ts +753 -0
- package/src/TxRef.ts +50 -38
- package/src/TxSemaphore.ts +29 -32
- package/src/TxSubscriptionRef.ts +639 -0
- package/src/Types.ts +78 -2
- package/src/index.ts +600 -21
- package/src/internal/core.ts +12 -5
- package/src/internal/dateTime.ts +9 -30
- package/src/internal/effect.ts +744 -265
- package/src/internal/hashMap.ts +9 -7
- package/src/internal/random.ts +20 -0
- package/src/internal/rcRef.ts +4 -3
- package/src/internal/request.ts +2 -2
- package/src/internal/schema/annotations.ts +2 -0
- package/src/internal/schema/schema.ts +1 -0
- package/src/internal/trie.ts +16 -9
- package/src/testing/TestClock.ts +13 -11
- package/src/testing/TestSchema.ts +10 -10
- package/src/unstable/ai/AiError.ts +97 -44
- package/src/unstable/ai/Chat.ts +12 -11
- package/src/unstable/ai/LanguageModel.ts +129 -25
- package/src/unstable/ai/McpSchema.ts +59 -13
- package/src/unstable/ai/McpServer.ts +48 -9
- package/src/unstable/ai/Model.ts +40 -9
- package/src/unstable/ai/Prompt.ts +37 -37
- package/src/unstable/ai/Response.ts +25 -25
- package/src/unstable/ai/Tool.ts +19 -13
- package/src/unstable/ai/index.ts +1 -1
- package/src/unstable/cli/CliOutput.ts +75 -6
- package/src/unstable/cli/Command.ts +501 -60
- package/src/unstable/cli/GlobalFlag.ts +243 -0
- package/src/unstable/cli/HelpDoc.ts +80 -2
- package/src/unstable/cli/index.ts +5 -0
- package/src/unstable/cli/internal/command.ts +50 -34
- package/src/unstable/cli/internal/completions/CommandDescriptor.ts +7 -2
- package/src/unstable/cli/internal/help.ts +146 -0
- package/src/unstable/cli/internal/parser.ts +33 -54
- package/src/unstable/cluster/ClusterCron.ts +2 -2
- package/src/unstable/cluster/ClusterWorkflowEngine.ts +5 -4
- package/src/unstable/cluster/Entity.ts +11 -10
- package/src/unstable/cluster/EntityResource.ts +4 -4
- package/src/unstable/cluster/Envelope.ts +1 -1
- package/src/unstable/cluster/K8sHttpClient.ts +5 -5
- package/src/unstable/cluster/MessageStorage.ts +3 -5
- package/src/unstable/cluster/Runners.ts +6 -5
- package/src/unstable/cluster/Sharding.ts +12 -10
- package/src/unstable/cluster/ShardingConfig.ts +30 -31
- package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
- package/src/unstable/cluster/internal/entityManager.ts +9 -8
- package/src/unstable/cluster/internal/entityReaper.ts +2 -1
- package/src/unstable/cluster/internal/resourceRef.ts +2 -1
- package/src/unstable/encoding/Sse.ts +3 -5
- package/src/unstable/eventlog/EventLog.ts +2 -1
- package/src/unstable/http/Cookies.ts +3 -3
- package/src/unstable/http/Headers.ts +28 -13
- package/src/unstable/http/HttpBody.ts +42 -1
- package/src/unstable/http/HttpClient.ts +58 -23
- package/src/unstable/http/HttpClientRequest.ts +38 -13
- package/src/unstable/http/HttpEffect.ts +46 -68
- package/src/unstable/http/HttpMethod.ts +16 -4
- package/src/unstable/http/HttpMiddleware.ts +9 -24
- package/src/unstable/http/HttpServerError.ts +42 -45
- package/src/unstable/http/HttpServerRequest.ts +1 -1
- package/src/unstable/http/HttpServerRespondable.ts +6 -6
- package/src/unstable/http/HttpServerResponse.ts +4 -2
- package/src/unstable/http/Multipart.ts +2 -2
- package/src/unstable/http/UrlParams.ts +20 -5
- package/src/unstable/http/internal/preResponseHandler.ts +15 -0
- package/src/unstable/httpapi/HttpApi.ts +5 -5
- package/src/unstable/httpapi/HttpApiBuilder.ts +77 -21
- package/src/unstable/httpapi/HttpApiClient.ts +14 -6
- package/src/unstable/httpapi/HttpApiEndpoint.ts +67 -83
- package/src/unstable/httpapi/HttpApiError.ts +30 -9
- package/src/unstable/httpapi/HttpApiGroup.ts +6 -6
- package/src/unstable/httpapi/HttpApiMiddleware.ts +4 -4
- package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
- package/src/unstable/httpapi/HttpApiSecurity.ts +3 -3
- package/src/unstable/httpapi/OpenApi.ts +41 -23
- package/src/unstable/observability/Otlp.ts +12 -12
- package/src/unstable/observability/OtlpExporter.ts +3 -3
- package/src/unstable/observability/OtlpLogger.ts +13 -9
- package/src/unstable/observability/OtlpMetrics.ts +4 -4
- package/src/unstable/observability/OtlpTracer.ts +4 -4
- package/src/unstable/persistence/KeyValueStore.ts +6 -6
- package/src/unstable/persistence/Persistable.ts +2 -2
- package/src/unstable/persistence/PersistedCache.ts +20 -9
- package/src/unstable/persistence/PersistedQueue.ts +25 -24
- package/src/unstable/persistence/Persistence.ts +3 -3
- package/src/unstable/persistence/RateLimiter.ts +4 -4
- package/src/unstable/process/ChildProcess.ts +6 -208
- package/src/unstable/process/ChildProcessSpawner.ts +75 -14
- package/src/unstable/reactivity/Atom.ts +27 -25
- package/src/unstable/reactivity/AtomHttpApi.ts +21 -20
- package/src/unstable/reactivity/AtomRegistry.ts +31 -7
- package/src/unstable/reactivity/AtomRpc.ts +3 -3
- package/src/unstable/reactivity/Hydration.ts +112 -0
- package/src/unstable/reactivity/index.ts +5 -0
- package/src/unstable/rpc/Rpc.ts +6 -6
- package/src/unstable/rpc/RpcClient.ts +12 -54
- package/src/unstable/rpc/RpcGroup.ts +4 -4
- package/src/unstable/rpc/RpcMiddleware.ts +3 -3
- package/src/unstable/rpc/RpcSchema.ts +17 -0
- package/src/unstable/rpc/RpcSerialization.ts +44 -9
- package/src/unstable/rpc/RpcServer.ts +21 -30
- package/src/unstable/rpc/Utils.ts +2 -1
- package/src/unstable/schema/VariantSchema.ts +6 -6
- package/src/unstable/socket/Socket.ts +16 -17
- package/src/unstable/sql/SqlClient.ts +1 -1
- package/src/unstable/sql/SqlError.ts +11 -9
- package/src/unstable/sql/SqlModel.ts +5 -5
- package/src/unstable/sql/SqlSchema.ts +41 -25
- package/src/unstable/sql/Statement.ts +0 -1
- package/src/unstable/workers/Worker.ts +2 -1
- package/src/unstable/workflow/DurableClock.ts +8 -8
- package/src/unstable/workflow/DurableDeferred.ts +2 -2
- package/src/unstable/workflow/Workflow.ts +6 -2
- package/src/unstable/workflow/WorkflowEngine.ts +185 -2
- package/dist/PartitionedSemaphore.d.ts +0 -52
- package/dist/PartitionedSemaphore.d.ts.map +0 -1
- package/dist/PartitionedSemaphore.js.map +0 -1
- package/dist/encoding/Base64.d.ts +0 -67
- package/dist/encoding/Base64.d.ts.map +0 -1
- package/dist/encoding/Base64.js +0 -146
- package/dist/encoding/Base64.js.map +0 -1
- package/dist/encoding/Base64Url.d.ts +0 -60
- package/dist/encoding/Base64Url.d.ts.map +0 -1
- package/dist/encoding/Base64Url.js +0 -89
- package/dist/encoding/Base64Url.js.map +0 -1
- package/dist/encoding/EncodingError.d.ts +0 -31
- package/dist/encoding/EncodingError.d.ts.map +0 -1
- package/dist/encoding/EncodingError.js +0 -22
- package/dist/encoding/EncodingError.js.map +0 -1
- package/dist/encoding/Hex.d.ts +0 -61
- package/dist/encoding/Hex.d.ts.map +0 -1
- package/dist/encoding/Hex.js +0 -115
- package/dist/encoding/Hex.js.map +0 -1
- package/dist/encoding/index.d.ts +0 -26
- package/dist/encoding/index.d.ts.map +0 -1
- package/dist/encoding/index.js +0 -27
- package/dist/encoding/index.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/src/PartitionedSemaphore.ts +0 -182
- package/src/encoding/Base64.ts +0 -366
- package/src/encoding/Base64Url.ts +0 -104
- package/src/encoding/EncodingError.ts +0 -35
- package/src/encoding/Hex.ts +0 -390
- package/src/encoding/index.ts +0 -31
- package/src/unstable/cli/internal/builtInFlags.ts +0 -78
package/dist/Optic.d.ts
CHANGED
|
@@ -1,9 +1,98 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Composable, immutable accessors for reading and updating nested data
|
|
3
|
+
* structures without mutation.
|
|
4
|
+
*
|
|
5
|
+
* **Mental model**
|
|
6
|
+
*
|
|
7
|
+
* - **Optic** — a first-class reference to a piece inside a larger structure.
|
|
8
|
+
* Compose optics to reach deeply nested values.
|
|
9
|
+
* - **Iso** — lossless two-way conversion (`get`/`set`) between `S` and `A`.
|
|
10
|
+
* Extends both {@link Lens} and {@link Prism}.
|
|
11
|
+
* - **Lens** — focuses on exactly one part of `S`. `get` always succeeds;
|
|
12
|
+
* `replace` needs the original `S` to produce the updated whole.
|
|
13
|
+
* - **Prism** — focuses on a part that may not be present (e.g. a union
|
|
14
|
+
* variant). `getResult` can fail; `set` builds a new `S` from `A` alone.
|
|
15
|
+
* - **Optional** — the most general optic: both reading and writing can fail.
|
|
16
|
+
* - **Traversal** — focuses on zero or more elements of an array-like
|
|
17
|
+
* structure. Technically `Optional<S, ReadonlyArray<A>>`.
|
|
18
|
+
* - **Hierarchy** (strongest → weakest):
|
|
19
|
+
* `Iso > Lens | Prism > Optional`. Composing a weaker optic with any other
|
|
20
|
+
* produces the weaker kind.
|
|
21
|
+
*
|
|
22
|
+
* **Common tasks**
|
|
23
|
+
*
|
|
24
|
+
* - Start a chain → {@link id} (identity iso)
|
|
25
|
+
* - Drill into a struct key → `.key("name")` / `.optionalKey("name")`
|
|
26
|
+
* - Drill into a key that may not exist → `.at("name")`
|
|
27
|
+
* - Narrow a tagged union → `.tag("MyVariant")`
|
|
28
|
+
* - Narrow by type guard → `.refine(guard)`
|
|
29
|
+
* - Add validation → `.check(Schema.isGreaterThan(0))`
|
|
30
|
+
* - Filter out `undefined` → `.notUndefined()`
|
|
31
|
+
* - Pick/omit struct keys → `.pick(["a","b"])` / `.omit(["c"])`
|
|
32
|
+
* - Traverse array elements → `.forEach(el => el.key("field"))`
|
|
33
|
+
* - Build an iso → {@link makeIso}
|
|
34
|
+
* - Build a lens → {@link makeLens}
|
|
35
|
+
* - Build a prism → {@link makePrism}, {@link fromChecks}
|
|
36
|
+
* - Build an optional → {@link makeOptional}
|
|
37
|
+
* - Focus into `Option.Some` → {@link some}
|
|
38
|
+
* - Focus into `Result.Success`/`Failure` → {@link success}, {@link failure}
|
|
39
|
+
* - Convert record ↔ entries → {@link entries}
|
|
40
|
+
* - Extract all traversal elements → {@link getAll}
|
|
41
|
+
*
|
|
42
|
+
* **Gotchas**
|
|
43
|
+
*
|
|
44
|
+
* - Updates are structurally persistent: only nodes on the path are cloned.
|
|
45
|
+
* Unrelated branches keep referential identity. However, **no-op updates
|
|
46
|
+
* may still allocate** a new root — do not rely on reference identity to
|
|
47
|
+
* detect no-ops.
|
|
48
|
+
* - `replace` silently returns the original `S` when the optic cannot focus
|
|
49
|
+
* (e.g. wrong tag). Use `replaceResult` for explicit failure.
|
|
50
|
+
* - `modify` also returns the original `S` on focus failure — it never throws.
|
|
51
|
+
* - `.key()` and `.optionalKey()` do not work on union types (compile error).
|
|
52
|
+
* - Only plain objects (`Object.prototype` or `null` prototype) and arrays can
|
|
53
|
+
* be cloned. Class instances cause a runtime error on `replace`/`modify`.
|
|
54
|
+
*
|
|
55
|
+
* **Quickstart**
|
|
56
|
+
*
|
|
57
|
+
* **Example** (reading and updating nested state)
|
|
58
|
+
*
|
|
59
|
+
* ```ts
|
|
60
|
+
* import { Optic } from "effect"
|
|
61
|
+
*
|
|
62
|
+
* type State = { user: { name: string; age: number } }
|
|
63
|
+
*
|
|
64
|
+
* const _age = Optic.id<State>().key("user").key("age")
|
|
65
|
+
*
|
|
66
|
+
* const s1: State = { user: { name: "Alice", age: 30 } }
|
|
67
|
+
*
|
|
68
|
+
* // Read
|
|
69
|
+
* console.log(_age.get(s1))
|
|
70
|
+
* // Output: 30
|
|
71
|
+
*
|
|
72
|
+
* // Update immutably
|
|
73
|
+
* const s2 = _age.replace(31, s1)
|
|
74
|
+
* console.log(s2)
|
|
75
|
+
* // Output: { user: { name: "Alice", age: 31 } }
|
|
76
|
+
*
|
|
77
|
+
* // Modify with a function
|
|
78
|
+
* const s3 = _age.modify((n) => n + 1)(s1)
|
|
79
|
+
* console.log(s3)
|
|
80
|
+
* // Output: { user: { name: "Alice", age: 31 } }
|
|
81
|
+
*
|
|
82
|
+
* // Referential identity is preserved for unrelated branches
|
|
83
|
+
* console.log(s2.user !== s1.user)
|
|
84
|
+
* // Output: true (on the path)
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* **See also**
|
|
88
|
+
*
|
|
89
|
+
* - {@link id} — entry point for optic chains
|
|
90
|
+
* - {@link Lens} / {@link Prism} / {@link Optional} — core optic types
|
|
91
|
+
* - {@link Traversal} / {@link getAll} — multi-focus optics
|
|
92
|
+
* - {@link some} / {@link success} / {@link failure} — built-in prisms
|
|
5
93
|
*
|
|
6
94
|
* @since 4.0.0
|
|
95
|
+
* @module
|
|
7
96
|
*/
|
|
8
97
|
import * as Option from "./Option.ts";
|
|
9
98
|
import * as Result from "./Result.ts";
|
|
@@ -11,17 +100,113 @@ import type * as Schema from "./Schema.ts";
|
|
|
11
100
|
import * as AST from "./SchemaAST.ts";
|
|
12
101
|
import type { IsUnion } from "./Types.ts";
|
|
13
102
|
/**
|
|
103
|
+
* A lossless, reversible conversion between types `S` and `A`.
|
|
104
|
+
*
|
|
105
|
+
* When to use:
|
|
106
|
+
* - You have a pair of functions that convert back and forth without losing
|
|
107
|
+
* information (e.g. `Record ↔ entries`, `Celsius ↔ Fahrenheit`).
|
|
108
|
+
* - You want the strongest optic that can be composed with any other.
|
|
109
|
+
*
|
|
110
|
+
* Behavior:
|
|
111
|
+
* - `get(s)` always succeeds and returns an `A`.
|
|
112
|
+
* - `set(a)` always succeeds and returns an `S`.
|
|
113
|
+
* - `get(set(a)) === a` and `set(get(s))` equals `s` (round-trip laws).
|
|
114
|
+
* - Extends both {@link Lens} and {@link Prism}.
|
|
115
|
+
*
|
|
116
|
+
* **Example** (Celsius ↔ Fahrenheit)
|
|
117
|
+
*
|
|
118
|
+
* ```ts
|
|
119
|
+
* import { Optic } from "effect"
|
|
120
|
+
*
|
|
121
|
+
* const fahrenheit = Optic.makeIso<number, number>(
|
|
122
|
+
* (c) => c * 9 / 5 + 32,
|
|
123
|
+
* (f) => (f - 32) * 5 / 9
|
|
124
|
+
* )
|
|
125
|
+
*
|
|
126
|
+
* console.log(fahrenheit.get(100))
|
|
127
|
+
* // Output: 212
|
|
128
|
+
*
|
|
129
|
+
* console.log(fahrenheit.set(32))
|
|
130
|
+
* // Output: 0
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* @see {@link makeIso} — constructor
|
|
134
|
+
* @see {@link Lens} — when you only need a one-directional focus into a whole
|
|
135
|
+
* @see {@link Prism} — when the focus may not be present
|
|
136
|
+
*
|
|
14
137
|
* @category Iso
|
|
15
138
|
* @since 4.0.0
|
|
16
139
|
*/
|
|
17
140
|
export interface Iso<in out S, in out A> extends Lens<S, A>, Prism<S, A> {
|
|
18
141
|
}
|
|
19
142
|
/**
|
|
143
|
+
* Creates an {@link Iso} from a pair of conversion functions.
|
|
144
|
+
*
|
|
145
|
+
* When to use:
|
|
146
|
+
* - You have two pure functions that form a lossless round-trip between `S`
|
|
147
|
+
* and `A`.
|
|
148
|
+
*
|
|
149
|
+
* Behavior:
|
|
150
|
+
* - Does not mutate inputs.
|
|
151
|
+
* - The returned optic can be composed with any other optic.
|
|
152
|
+
*
|
|
153
|
+
* **Example** (wrapping/unwrapping a branded type)
|
|
154
|
+
*
|
|
155
|
+
* ```ts
|
|
156
|
+
* import { Optic } from "effect"
|
|
157
|
+
*
|
|
158
|
+
* type Meters = { readonly value: number }
|
|
159
|
+
* const meters = Optic.makeIso<Meters, number>(
|
|
160
|
+
* (m) => m.value,
|
|
161
|
+
* (n) => ({ value: n })
|
|
162
|
+
* )
|
|
163
|
+
*
|
|
164
|
+
* console.log(meters.get({ value: 100 }))
|
|
165
|
+
* // Output: 100
|
|
166
|
+
*
|
|
167
|
+
* console.log(meters.set(42))
|
|
168
|
+
* // Output: { value: 42 }
|
|
169
|
+
* ```
|
|
170
|
+
*
|
|
171
|
+
* @see {@link Iso} — the type this function returns
|
|
172
|
+
* @see {@link id} — identity iso (no conversion)
|
|
173
|
+
*
|
|
20
174
|
* @category Constructors
|
|
21
175
|
* @since 4.0.0
|
|
22
176
|
*/
|
|
23
177
|
export declare function makeIso<S, A>(get: (s: S) => A, set: (a: A) => S): Iso<S, A>;
|
|
24
178
|
/**
|
|
179
|
+
* Focuses on exactly one part `A` inside a whole `S`.
|
|
180
|
+
*
|
|
181
|
+
* When to use:
|
|
182
|
+
* - You always have a value to read (the part exists unconditionally).
|
|
183
|
+
* - You need the original `S` to produce the updated whole (unlike
|
|
184
|
+
* {@link Iso}).
|
|
185
|
+
*
|
|
186
|
+
* Behavior:
|
|
187
|
+
* - `get(s)` always succeeds and returns `A`.
|
|
188
|
+
* - `replace(a, s)` returns a new `S` with the focused part replaced.
|
|
189
|
+
* - Extends {@link Optional}.
|
|
190
|
+
* - Composing a Lens with a {@link Prism} or {@link Optional} produces an
|
|
191
|
+
* {@link Optional}.
|
|
192
|
+
*
|
|
193
|
+
* **Example** (focusing on a struct field)
|
|
194
|
+
*
|
|
195
|
+
* ```ts
|
|
196
|
+
* import { Optic } from "effect"
|
|
197
|
+
*
|
|
198
|
+
* type Person = { readonly name: string; readonly age: number }
|
|
199
|
+
*
|
|
200
|
+
* const _name = Optic.id<Person>().key("name")
|
|
201
|
+
*
|
|
202
|
+
* console.log(_name.get({ name: "Alice", age: 30 }))
|
|
203
|
+
* // Output: "Alice"
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
206
|
+
* @see {@link makeLens} — constructor
|
|
207
|
+
* @see {@link Iso} — when conversion is lossless in both directions
|
|
208
|
+
* @see {@link Optional} — when reading can also fail
|
|
209
|
+
*
|
|
25
210
|
* @category Lens
|
|
26
211
|
* @since 4.0.0
|
|
27
212
|
*/
|
|
@@ -29,11 +214,80 @@ export interface Lens<in out S, in out A> extends Optional<S, A> {
|
|
|
29
214
|
readonly get: (s: S) => A;
|
|
30
215
|
}
|
|
31
216
|
/**
|
|
217
|
+
* Creates a {@link Lens} from a getter and a replacer.
|
|
218
|
+
*
|
|
219
|
+
* When to use:
|
|
220
|
+
* - You can always extract `A` from `S` and produce a new `S` by
|
|
221
|
+
* substituting a new `A`.
|
|
222
|
+
*
|
|
223
|
+
* Behavior:
|
|
224
|
+
* - Does not mutate inputs.
|
|
225
|
+
* - `replace(a, s)` should return a structurally new `S` with `a` in place
|
|
226
|
+
* of the old focus.
|
|
227
|
+
*
|
|
228
|
+
* **Example** (lens into the first element of a pair)
|
|
229
|
+
*
|
|
230
|
+
* ```ts
|
|
231
|
+
* import { Optic } from "effect"
|
|
232
|
+
*
|
|
233
|
+
* const _first = Optic.makeLens<readonly [string, number], string>(
|
|
234
|
+
* (pair) => pair[0],
|
|
235
|
+
* (s, pair) => [s, pair[1]]
|
|
236
|
+
* )
|
|
237
|
+
*
|
|
238
|
+
* console.log(_first.get(["hello", 42]))
|
|
239
|
+
* // Output: "hello"
|
|
240
|
+
*
|
|
241
|
+
* console.log(_first.replace("world", ["hello", 42]))
|
|
242
|
+
* // Output: ["world", 42]
|
|
243
|
+
* ```
|
|
244
|
+
*
|
|
245
|
+
* @see {@link Lens} — the type this function returns
|
|
246
|
+
* @see {@link makeIso} — when no original `S` is needed for `set`
|
|
247
|
+
*
|
|
32
248
|
* @category Constructors
|
|
33
249
|
* @since 4.0.0
|
|
34
250
|
*/
|
|
35
251
|
export declare function makeLens<S, A>(get: (s: S) => A, replace: (a: A, s: S) => S): Lens<S, A>;
|
|
36
252
|
/**
|
|
253
|
+
* Focuses on a part `A` of `S` that may not be present (e.g. a union
|
|
254
|
+
* variant or a validated subset).
|
|
255
|
+
*
|
|
256
|
+
* When to use:
|
|
257
|
+
* - The focus is conditional — reading can fail (wrong variant, failed
|
|
258
|
+
* validation).
|
|
259
|
+
* - Building a new `S` from `A` does **not** require the original `S`.
|
|
260
|
+
*
|
|
261
|
+
* Behavior:
|
|
262
|
+
* - `getResult(s)` returns `Result.Success<A>` when the focus matches, or
|
|
263
|
+
* `Result.Failure<string>` with an error message.
|
|
264
|
+
* - `set(a)` always succeeds and returns a new `S`.
|
|
265
|
+
* - Extends {@link Optional}.
|
|
266
|
+
* - Composing two Prisms produces a Prism; composing a Prism with a
|
|
267
|
+
* {@link Lens} produces an {@link Optional}.
|
|
268
|
+
*
|
|
269
|
+
* **Example** (narrowing a tagged union)
|
|
270
|
+
*
|
|
271
|
+
* ```ts
|
|
272
|
+
* import { Optic, Result } from "effect"
|
|
273
|
+
*
|
|
274
|
+
* type Shape =
|
|
275
|
+
* | { readonly _tag: "Circle"; readonly radius: number }
|
|
276
|
+
* | { readonly _tag: "Rect"; readonly width: number }
|
|
277
|
+
*
|
|
278
|
+
* const _circle = Optic.id<Shape>().tag("Circle")
|
|
279
|
+
*
|
|
280
|
+
* console.log(Result.isSuccess(_circle.getResult({ _tag: "Circle", radius: 5 })))
|
|
281
|
+
* // Output: true
|
|
282
|
+
*
|
|
283
|
+
* console.log(Result.isFailure(_circle.getResult({ _tag: "Rect", width: 10 })))
|
|
284
|
+
* // Output: true
|
|
285
|
+
* ```
|
|
286
|
+
*
|
|
287
|
+
* @see {@link makePrism} — constructor
|
|
288
|
+
* @see {@link fromChecks} — build a Prism from schema checks
|
|
289
|
+
* @see {@link Lens} — when reading always succeeds
|
|
290
|
+
*
|
|
37
291
|
* @category Prism
|
|
38
292
|
* @since 4.0.0
|
|
39
293
|
*/
|
|
@@ -41,11 +295,77 @@ export interface Prism<in out S, in out A> extends Optional<S, A> {
|
|
|
41
295
|
readonly set: (a: A) => S;
|
|
42
296
|
}
|
|
43
297
|
/**
|
|
298
|
+
* Creates a {@link Prism} from a fallible getter and an infallible setter.
|
|
299
|
+
*
|
|
300
|
+
* When to use:
|
|
301
|
+
* - Reading can fail (the part may not exist in `S`), but building `S`
|
|
302
|
+
* from `A` always succeeds.
|
|
303
|
+
*
|
|
304
|
+
* Behavior:
|
|
305
|
+
* - Does not mutate inputs.
|
|
306
|
+
* - `getResult` should return `Result.fail(message)` on mismatch.
|
|
307
|
+
*
|
|
308
|
+
* **Example** (parsing a string to a number)
|
|
309
|
+
*
|
|
310
|
+
* ```ts
|
|
311
|
+
* import { Optic, Result } from "effect"
|
|
312
|
+
*
|
|
313
|
+
* const numeric = Optic.makePrism<string, number>(
|
|
314
|
+
* (s) => {
|
|
315
|
+
* const n = Number(s)
|
|
316
|
+
* return Number.isNaN(n) ? Result.fail("not a number") : Result.succeed(n)
|
|
317
|
+
* },
|
|
318
|
+
* String
|
|
319
|
+
* )
|
|
320
|
+
*
|
|
321
|
+
* console.log(Result.isSuccess(numeric.getResult("42")))
|
|
322
|
+
* // Output: true
|
|
323
|
+
*
|
|
324
|
+
* console.log(numeric.set(42))
|
|
325
|
+
* // Output: "42"
|
|
326
|
+
* ```
|
|
327
|
+
*
|
|
328
|
+
* @see {@link Prism} — the type this function returns
|
|
329
|
+
* @see {@link fromChecks} — build from `Schema` checks instead
|
|
330
|
+
*
|
|
44
331
|
* @category Constructors
|
|
45
332
|
* @since 4.0.0
|
|
46
333
|
*/
|
|
47
334
|
export declare function makePrism<S, A>(getResult: (s: S) => Result.Result<A, string>, set: (a: A) => S): Prism<S, A>;
|
|
48
335
|
/**
|
|
336
|
+
* Creates a {@link Prism} from one or more `Schema` validation checks.
|
|
337
|
+
*
|
|
338
|
+
* When to use:
|
|
339
|
+
* - You want to narrow `T` to the subset that passes certain validation
|
|
340
|
+
* rules (e.g. positive integer).
|
|
341
|
+
* - You already have `Schema.isGreaterThan`, `Schema.isInt`, etc.
|
|
342
|
+
*
|
|
343
|
+
* Behavior:
|
|
344
|
+
* - `getResult` runs all checks; fails with a combined error message when
|
|
345
|
+
* any check fails.
|
|
346
|
+
* - `set` is identity — the value passes through unchanged.
|
|
347
|
+
* - Does not mutate inputs.
|
|
348
|
+
*
|
|
349
|
+
* **Example** (positive integer prism)
|
|
350
|
+
*
|
|
351
|
+
* ```ts
|
|
352
|
+
* import { Optic, Result, Schema } from "effect"
|
|
353
|
+
*
|
|
354
|
+
* const posInt = Optic.fromChecks<number>(
|
|
355
|
+
* Schema.isGreaterThan(0),
|
|
356
|
+
* Schema.isInt()
|
|
357
|
+
* )
|
|
358
|
+
*
|
|
359
|
+
* console.log(Result.isSuccess(posInt.getResult(3)))
|
|
360
|
+
* // Output: true
|
|
361
|
+
*
|
|
362
|
+
* console.log(Result.isFailure(posInt.getResult(-1)))
|
|
363
|
+
* // Output: true
|
|
364
|
+
* ```
|
|
365
|
+
*
|
|
366
|
+
* @see {@link makePrism} — constructor with custom getter/setter
|
|
367
|
+
* @see {@link Prism} — the type this function returns
|
|
368
|
+
*
|
|
49
369
|
* @category Constructors
|
|
50
370
|
* @since 4.0.0
|
|
51
371
|
*/
|
|
@@ -95,27 +415,232 @@ declare class CheckNode<T> {
|
|
|
95
415
|
}
|
|
96
416
|
type ForbidUnion<A, Message extends string> = IsUnion<A> extends true ? [Message] : [];
|
|
97
417
|
/**
|
|
418
|
+
* The most general optic — both reading and writing can fail.
|
|
419
|
+
*
|
|
420
|
+
* When to use:
|
|
421
|
+
* - The focus may not exist in `S` **and** writing a new `A` back may also
|
|
422
|
+
* fail (e.g. the source no longer matches the expected shape).
|
|
423
|
+
* - As the base type: every optic ({@link Iso}, {@link Lens}, {@link Prism},
|
|
424
|
+
* {@link Traversal}) extends `Optional`.
|
|
425
|
+
*
|
|
426
|
+
* Behavior:
|
|
427
|
+
* - `getResult(s)` returns `Result.Success<A>` or `Result.Failure<string>`.
|
|
428
|
+
* - `replaceResult(a, s)` returns `Result.Success<S>` or
|
|
429
|
+
* `Result.Failure<string>`.
|
|
430
|
+
* - `replace(a, s)` returns the original `s` on failure (never throws).
|
|
431
|
+
* - `modify(f)` returns the original `s` on failure (never throws).
|
|
432
|
+
* - All operations are pure; inputs are never mutated.
|
|
433
|
+
*
|
|
434
|
+
* **Example** (record key that may be absent)
|
|
435
|
+
*
|
|
436
|
+
* ```ts
|
|
437
|
+
* import { Optic, Result } from "effect"
|
|
438
|
+
*
|
|
439
|
+
* type Env = { [key: string]: string }
|
|
440
|
+
* const _home = Optic.id<Env>().at("HOME")
|
|
441
|
+
*
|
|
442
|
+
* console.log(Result.isSuccess(_home.getResult({ HOME: "/root" })))
|
|
443
|
+
* // Output: true
|
|
444
|
+
*
|
|
445
|
+
* console.log(Result.isFailure(_home.getResult({ PATH: "/bin" })))
|
|
446
|
+
* // Output: true
|
|
447
|
+
*
|
|
448
|
+
* // replace returns original on failure
|
|
449
|
+
* console.log(_home.replace("/new", { PATH: "/bin" }))
|
|
450
|
+
* // Output: { PATH: "/bin" }
|
|
451
|
+
* ```
|
|
452
|
+
*
|
|
453
|
+
* @see {@link makeOptional} — constructor
|
|
454
|
+
* @see {@link Lens} — when reading always succeeds
|
|
455
|
+
* @see {@link Prism} — when writing always succeeds
|
|
456
|
+
*
|
|
98
457
|
* @category Optional
|
|
99
458
|
* @since 4.0.0
|
|
100
459
|
*/
|
|
101
460
|
export interface Optional<in out S, in out A> {
|
|
102
461
|
readonly node: Node;
|
|
462
|
+
/**
|
|
463
|
+
* Attempts to read the focus `A` from the whole `S`.
|
|
464
|
+
*
|
|
465
|
+
* Returns `Result.Success<A>` when the focus exists, or
|
|
466
|
+
* `Result.Failure<string>` with a descriptive error otherwise.
|
|
467
|
+
*/
|
|
103
468
|
readonly getResult: (s: S) => Result.Result<A, string>;
|
|
469
|
+
/**
|
|
470
|
+
* Replaces the focus in `S` with a new `A`. Returns the original `s`
|
|
471
|
+
* unchanged when the optic cannot focus (never throws).
|
|
472
|
+
*/
|
|
104
473
|
readonly replace: (a: A, s: S) => S;
|
|
474
|
+
/**
|
|
475
|
+
* Like {@link replace}, but returns an explicit `Result` so callers can
|
|
476
|
+
* detect and handle failure.
|
|
477
|
+
*/
|
|
105
478
|
readonly replaceResult: (a: A, s: S) => Result.Result<S, string>;
|
|
479
|
+
/**
|
|
480
|
+
* Composes this optic with another. The result type is the weakest of
|
|
481
|
+
* the two: Iso + Iso = Iso, Lens + Prism = Optional, etc.
|
|
482
|
+
*
|
|
483
|
+
* **Example** (composing a lens with a prism)
|
|
484
|
+
*
|
|
485
|
+
* ```ts
|
|
486
|
+
* import { Optic, Option } from "effect"
|
|
487
|
+
*
|
|
488
|
+
* type State = { value: Option.Option<number> }
|
|
489
|
+
*
|
|
490
|
+
* const _inner = Optic.id<State>().key("value").compose(Optic.some())
|
|
491
|
+
* // _inner is Optional<State, number>
|
|
492
|
+
* ```
|
|
493
|
+
*
|
|
494
|
+
* @see {@link id} — start a composition chain
|
|
495
|
+
*/
|
|
106
496
|
compose<B>(this: Iso<S, A>, that: Iso<A, B>): Iso<S, B>;
|
|
107
497
|
compose<B>(this: Lens<S, A>, that: Lens<A, B>): Lens<S, B>;
|
|
108
498
|
compose<B>(this: Prism<S, A>, that: Prism<A, B>): Prism<S, B>;
|
|
109
499
|
compose<B>(this: Optional<S, A>, that: Optional<A, B>): Optional<S, B>;
|
|
500
|
+
/**
|
|
501
|
+
* Returns a function `(s: S) => S` that applies `f` to the focused value.
|
|
502
|
+
* If the optic cannot focus, the original `s` is returned unchanged.
|
|
503
|
+
*
|
|
504
|
+
* **Example** (incrementing a nested field)
|
|
505
|
+
*
|
|
506
|
+
* ```ts
|
|
507
|
+
* import { Optic } from "effect"
|
|
508
|
+
*
|
|
509
|
+
* type S = { readonly a: { readonly b: number } }
|
|
510
|
+
* const _b = Optic.id<S>().key("a").key("b")
|
|
511
|
+
*
|
|
512
|
+
* const inc = _b.modify((n) => n + 1)
|
|
513
|
+
* console.log(inc({ a: { b: 1 } }))
|
|
514
|
+
* // Output: { a: { b: 2 } }
|
|
515
|
+
* ```
|
|
516
|
+
*/
|
|
110
517
|
modify(f: (a: A) => A): (s: S) => S;
|
|
518
|
+
/**
|
|
519
|
+
* Focuses on a property of the current struct/tuple focus.
|
|
520
|
+
*
|
|
521
|
+
* - On a {@link Lens}, returns a Lens.
|
|
522
|
+
* - On an {@link Optional}, returns an Optional.
|
|
523
|
+
* - Does **not** work on union types (compile error).
|
|
524
|
+
*
|
|
525
|
+
* **Example** (drilling into nested structs)
|
|
526
|
+
*
|
|
527
|
+
* ```ts
|
|
528
|
+
* import { Optic } from "effect"
|
|
529
|
+
*
|
|
530
|
+
* type S = { readonly a: { readonly b: number } }
|
|
531
|
+
* const _b = Optic.id<S>().key("a").key("b")
|
|
532
|
+
*
|
|
533
|
+
* console.log(_b.get({ a: { b: 42 } }))
|
|
534
|
+
* // Output: 42
|
|
535
|
+
* ```
|
|
536
|
+
*/
|
|
111
537
|
key<S, A extends object, Key extends keyof A>(this: Lens<S, A>, key: Key, ..._err: ForbidUnion<A, "cannot use `key` on a union type">): Lens<S, A[Key]>;
|
|
112
538
|
key<S, A extends object, Key extends keyof A>(this: Optional<S, A>, key: Key, ..._err: ForbidUnion<A, "cannot use `key` on a union type">): Optional<S, A[Key]>;
|
|
539
|
+
/**
|
|
540
|
+
* Focuses on a key where setting `undefined` **removes** the key from the
|
|
541
|
+
* struct (or splices the element from an array/tuple).
|
|
542
|
+
*
|
|
543
|
+
* - The focus type becomes `A[Key] | undefined`.
|
|
544
|
+
* - Does **not** work on union types (compile error).
|
|
545
|
+
*
|
|
546
|
+
* **Example** (deleting an optional key)
|
|
547
|
+
*
|
|
548
|
+
* ```ts
|
|
549
|
+
* import { Optic } from "effect"
|
|
550
|
+
*
|
|
551
|
+
* type S = { readonly a?: number }
|
|
552
|
+
* const _a = Optic.id<S>().optionalKey("a")
|
|
553
|
+
*
|
|
554
|
+
* console.log(_a.replace(undefined, { a: 1 }))
|
|
555
|
+
* // Output: {}
|
|
556
|
+
*
|
|
557
|
+
* console.log(_a.replace(2, {}))
|
|
558
|
+
* // Output: { a: 2 }
|
|
559
|
+
* ```
|
|
560
|
+
*/
|
|
113
561
|
optionalKey<S, A extends object, Key extends keyof A>(this: Lens<S, A>, key: Key, ..._err: ForbidUnion<A, "cannot use `optionalKey` on a union type">): Lens<S, A[Key] | undefined>;
|
|
114
562
|
optionalKey<S, A extends object, Key extends keyof A>(this: Optional<S, A>, key: Key, ..._err: ForbidUnion<A, "cannot use `optionalKey` on a union type">): Optional<S, A[Key] | undefined>;
|
|
563
|
+
/**
|
|
564
|
+
* Adds one or more `Schema` validation checks to the optic chain.
|
|
565
|
+
* `getResult` fails when any check fails; `set` passes through unchanged.
|
|
566
|
+
*
|
|
567
|
+
* - On a {@link Prism}, returns a Prism.
|
|
568
|
+
* - On an {@link Optional}, returns an Optional.
|
|
569
|
+
*
|
|
570
|
+
* **Example** (only focus positive numbers)
|
|
571
|
+
*
|
|
572
|
+
* ```ts
|
|
573
|
+
* import { Optic, Result, Schema } from "effect"
|
|
574
|
+
*
|
|
575
|
+
* const _pos = Optic.id<number>().check(Schema.isGreaterThan(0))
|
|
576
|
+
*
|
|
577
|
+
* console.log(Result.isSuccess(_pos.getResult(5)))
|
|
578
|
+
* // Output: true
|
|
579
|
+
*
|
|
580
|
+
* console.log(Result.isFailure(_pos.getResult(-1)))
|
|
581
|
+
* // Output: true
|
|
582
|
+
* ```
|
|
583
|
+
*
|
|
584
|
+
* @see {@link fromChecks} — standalone prism from checks
|
|
585
|
+
*/
|
|
115
586
|
check<S, A>(this: Prism<S, A>, ...checks: readonly [AST.Check<A>, ...Array<AST.Check<A>>]): Prism<S, A>;
|
|
116
587
|
check<S, A>(this: Optional<S, A>, ...checks: readonly [AST.Check<A>, ...Array<AST.Check<A>>]): Optional<S, A>;
|
|
588
|
+
/**
|
|
589
|
+
* Narrows the focus to a subtype `B` using a type guard.
|
|
590
|
+
*
|
|
591
|
+
* - On a {@link Prism}, returns a Prism.
|
|
592
|
+
* - On an {@link Optional}, returns an Optional.
|
|
593
|
+
* - Pass optional `annotations` to customize the error message.
|
|
594
|
+
*
|
|
595
|
+
* **Example** (narrowing a union)
|
|
596
|
+
*
|
|
597
|
+
* ```ts
|
|
598
|
+
* import { Optic, Result } from "effect"
|
|
599
|
+
*
|
|
600
|
+
* type B = { readonly _tag: "b"; readonly b: number }
|
|
601
|
+
* type S = { readonly _tag: "a"; readonly a: string } | B
|
|
602
|
+
*
|
|
603
|
+
* const _b = Optic.id<S>().refine(
|
|
604
|
+
* (s: S): s is B => s._tag === "b",
|
|
605
|
+
* { expected: `"b" tag` }
|
|
606
|
+
* )
|
|
607
|
+
*
|
|
608
|
+
* console.log(Result.isSuccess(_b.getResult({ _tag: "b", b: 1 })))
|
|
609
|
+
* // Output: true
|
|
610
|
+
* ```
|
|
611
|
+
*
|
|
612
|
+
* @see `.tag()` — shorthand for narrowing by `_tag`
|
|
613
|
+
*/
|
|
117
614
|
refine<S, A, B extends A>(this: Prism<S, A>, refinement: (a: A) => a is B, annotations?: Schema.Annotations.Filter): Prism<S, B>;
|
|
118
615
|
refine<S, A, B extends A>(this: Optional<S, A>, refinement: (a: A) => a is B, annotations?: Schema.Annotations.Filter): Optional<S, B>;
|
|
616
|
+
/**
|
|
617
|
+
* Narrows the focus to the variant of a tagged union with the given
|
|
618
|
+
* `_tag` value.
|
|
619
|
+
*
|
|
620
|
+
* - On a {@link Prism}, returns a Prism.
|
|
621
|
+
* - On an {@link Optional}, returns an Optional.
|
|
622
|
+
* - Shorthand for `.refine(s => s._tag === tag)`.
|
|
623
|
+
*
|
|
624
|
+
* **Example** (focusing a tagged variant)
|
|
625
|
+
*
|
|
626
|
+
* ```ts
|
|
627
|
+
* import { Optic, Result } from "effect"
|
|
628
|
+
*
|
|
629
|
+
* type Shape =
|
|
630
|
+
* | { readonly _tag: "Circle"; readonly radius: number }
|
|
631
|
+
* | { readonly _tag: "Rect"; readonly width: number }
|
|
632
|
+
*
|
|
633
|
+
* const _radius = Optic.id<Shape>().tag("Circle").key("radius")
|
|
634
|
+
*
|
|
635
|
+
* console.log(Result.isSuccess(_radius.getResult({ _tag: "Circle", radius: 5 })))
|
|
636
|
+
* // Output: true
|
|
637
|
+
*
|
|
638
|
+
* console.log(Result.isFailure(_radius.getResult({ _tag: "Rect", width: 10 })))
|
|
639
|
+
* // Output: true
|
|
640
|
+
* ```
|
|
641
|
+
*
|
|
642
|
+
* @see `.refine()` — for arbitrary type guards
|
|
643
|
+
*/
|
|
119
644
|
tag<S, A extends {
|
|
120
645
|
readonly _tag: AST.LiteralValue;
|
|
121
646
|
}, Tag extends A["_tag"]>(this: Prism<S, A>, tag: Tag): Prism<S, Extract<A, {
|
|
@@ -126,88 +651,492 @@ export interface Optional<in out S, in out A> {
|
|
|
126
651
|
}, Tag extends A["_tag"]>(this: Optional<S, A>, tag: Tag): Optional<S, Extract<A, {
|
|
127
652
|
readonly _tag: Tag;
|
|
128
653
|
}>>;
|
|
654
|
+
/**
|
|
655
|
+
* Focuses on a key only if it exists (`Object.hasOwn`). Both
|
|
656
|
+
* `getResult` and `replaceResult` fail when the key is absent.
|
|
657
|
+
*
|
|
658
|
+
* Unlike `.key()`, which always succeeds on the read side, `.at()` is
|
|
659
|
+
* useful for Records or arrays where the key/index may not be present.
|
|
660
|
+
*
|
|
661
|
+
* - Always returns an {@link Optional}.
|
|
662
|
+
* - Does **not** work on union types (compile error).
|
|
663
|
+
*
|
|
664
|
+
* **Example** (safe record access)
|
|
665
|
+
*
|
|
666
|
+
* ```ts
|
|
667
|
+
* import { Optic, Result } from "effect"
|
|
668
|
+
*
|
|
669
|
+
* type Env = { [key: string]: number }
|
|
670
|
+
* const _x = Optic.id<Env>().at("x")
|
|
671
|
+
*
|
|
672
|
+
* console.log(Result.isSuccess(_x.getResult({ x: 1 })))
|
|
673
|
+
* // Output: true
|
|
674
|
+
*
|
|
675
|
+
* console.log(Result.isFailure(_x.getResult({ y: 2 })))
|
|
676
|
+
* // Output: true
|
|
677
|
+
* ```
|
|
678
|
+
*
|
|
679
|
+
* @see `.key()` — when the key is always present
|
|
680
|
+
*/
|
|
129
681
|
at<S, A extends object, Key extends keyof A>(this: Optional<S, A>, key: Key, ..._err: ForbidUnion<A, "cannot use `at` on a union type">): Optional<S, A[Key]>;
|
|
130
682
|
/**
|
|
131
|
-
*
|
|
683
|
+
* Focuses on a subset of keys of the current struct focus.
|
|
684
|
+
*
|
|
685
|
+
* - On a {@link Lens}, returns a Lens.
|
|
686
|
+
* - On an {@link Optional}, returns an Optional.
|
|
687
|
+
* - Does **not** work on union types (compile error).
|
|
688
|
+
*
|
|
689
|
+
* **Example** (picking keys)
|
|
690
|
+
*
|
|
691
|
+
* ```ts
|
|
692
|
+
* import { Optic } from "effect"
|
|
693
|
+
*
|
|
694
|
+
* type S = { readonly a: string; readonly b: number; readonly c: boolean }
|
|
695
|
+
*
|
|
696
|
+
* const _ac = Optic.id<S>().pick(["a", "c"])
|
|
697
|
+
*
|
|
698
|
+
* console.log(_ac.get({ a: "hi", b: 1, c: true }))
|
|
699
|
+
* // Output: { a: "hi", c: true }
|
|
700
|
+
* ```
|
|
701
|
+
*
|
|
702
|
+
* @see `.omit()` — the inverse operation
|
|
132
703
|
*/
|
|
133
704
|
pick<S, A, Keys extends ReadonlyArray<keyof A>>(this: Lens<S, A>, keys: Keys, ..._err: ForbidUnion<A, "cannot use `pick` on a union type">): Lens<S, Pick<A, Keys[number]>>;
|
|
134
705
|
pick<S, A, Keys extends ReadonlyArray<keyof A>>(this: Optional<S, A>, keys: Keys, ..._err: ForbidUnion<A, "cannot use `pick` on a union type">): Optional<S, Pick<A, Keys[number]>>;
|
|
135
706
|
/**
|
|
136
|
-
*
|
|
707
|
+
* Focuses on all keys **except** the specified ones.
|
|
708
|
+
*
|
|
709
|
+
* - On a {@link Lens}, returns a Lens.
|
|
710
|
+
* - On an {@link Optional}, returns an Optional.
|
|
711
|
+
* - Does **not** work on union types (compile error).
|
|
712
|
+
*
|
|
713
|
+
* **Example** (omitting keys)
|
|
714
|
+
*
|
|
715
|
+
* ```ts
|
|
716
|
+
* import { Optic } from "effect"
|
|
717
|
+
*
|
|
718
|
+
* type S = { readonly a: string; readonly b: number; readonly c: boolean }
|
|
719
|
+
*
|
|
720
|
+
* const _ac = Optic.id<S>().omit(["b"])
|
|
721
|
+
*
|
|
722
|
+
* console.log(_ac.get({ a: "hi", b: 1, c: true }))
|
|
723
|
+
* // Output: { a: "hi", c: true }
|
|
724
|
+
* ```
|
|
725
|
+
*
|
|
726
|
+
* @see `.pick()` — the inverse operation
|
|
137
727
|
*
|
|
138
728
|
* @since 1.0.0
|
|
139
729
|
*/
|
|
140
730
|
omit<S, A, Keys extends ReadonlyArray<keyof A>>(this: Lens<S, A>, keys: Keys, ..._err: ForbidUnion<A, "cannot use `omit` on a union type">): Lens<S, Omit<A, Keys[number]>>;
|
|
141
731
|
omit<S, A, Keys extends ReadonlyArray<keyof A>>(this: Optional<S, A>, keys: Keys, ..._err: ForbidUnion<A, "cannot use `omit` on a union type">): Optional<S, Omit<A, Keys[number]>>;
|
|
142
732
|
/**
|
|
143
|
-
*
|
|
733
|
+
* Filters out `undefined` from the focus, producing a {@link Prism}.
|
|
734
|
+
*
|
|
735
|
+
* `getResult` fails when the focus is `undefined`.
|
|
736
|
+
*
|
|
737
|
+
* **Example** (filtering undefined)
|
|
738
|
+
*
|
|
739
|
+
* ```ts
|
|
740
|
+
* import { Optic, Result } from "effect"
|
|
741
|
+
*
|
|
742
|
+
* const _defined = Optic.id<number | undefined>().notUndefined()
|
|
743
|
+
*
|
|
744
|
+
* console.log(Result.isSuccess(_defined.getResult(42)))
|
|
745
|
+
* // Output: true
|
|
746
|
+
*
|
|
747
|
+
* console.log(Result.isFailure(_defined.getResult(undefined)))
|
|
748
|
+
* // Output: true
|
|
749
|
+
* ```
|
|
144
750
|
*
|
|
145
751
|
* @since 4.0.0
|
|
146
752
|
*/
|
|
147
753
|
notUndefined(): Prism<S, Exclude<A, undefined>>;
|
|
148
754
|
notUndefined(): Optional<S, Exclude<A, undefined>>;
|
|
149
755
|
/**
|
|
150
|
-
* Focuses **all elements** of an array-like focus and
|
|
151
|
-
*
|
|
756
|
+
* Focuses **all elements** of an array-like focus and optionally narrows
|
|
757
|
+
* to a subset using an element-level optic.
|
|
758
|
+
*
|
|
759
|
+
* Available only on {@link Traversal} (i.e. when `A` is
|
|
760
|
+
* `ReadonlyArray<Element>`). Returns a new Traversal focused on the
|
|
761
|
+
* selected elements.
|
|
762
|
+
*
|
|
763
|
+
* Behavior:
|
|
764
|
+
* - **getResult** collects the values focused by `f(id<A>())` for each
|
|
765
|
+
* element. Non-focusable elements are skipped.
|
|
766
|
+
* - **replaceResult** expects exactly as many values as were collected by
|
|
767
|
+
* `getResult` and writes them back in order. Fails with a
|
|
768
|
+
* length-mismatch error if counts differ.
|
|
769
|
+
*
|
|
770
|
+
* **Example** (incrementing liked posts)
|
|
152
771
|
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
772
|
+
* ```ts
|
|
773
|
+
* import { Optic, Schema } from "effect"
|
|
774
|
+
*
|
|
775
|
+
* type Post = { title: string; likes: number }
|
|
776
|
+
* type S = { user: { posts: ReadonlyArray<Post> } }
|
|
777
|
+
*
|
|
778
|
+
* const _likes = Optic.id<S>()
|
|
779
|
+
* .key("user")
|
|
780
|
+
* .key("posts")
|
|
781
|
+
* .forEach((post) => post.key("likes").check(Schema.isGreaterThan(0)))
|
|
782
|
+
*
|
|
783
|
+
* const addLike = _likes.modifyAll((n) => n + 1)
|
|
784
|
+
*
|
|
785
|
+
* console.log(
|
|
786
|
+
* addLike({
|
|
787
|
+
* user: { posts: [{ title: "a", likes: 0 }, { title: "b", likes: 1 }] }
|
|
788
|
+
* })
|
|
789
|
+
* )
|
|
790
|
+
* // Output: { user: { posts: [{ title: "a", likes: 0 }, { title: "b", likes: 2 }] } }
|
|
791
|
+
* ```
|
|
792
|
+
*
|
|
793
|
+
* @see {@link getAll} — extract all focused elements as an array
|
|
794
|
+
* @see `.modifyAll()` — apply a function to every focused element
|
|
161
795
|
*/
|
|
162
796
|
forEach<S, A, B>(this: Traversal<S, A>, f: (iso: Iso<A, A>) => Optional<A, B>): Traversal<S, B>;
|
|
797
|
+
/**
|
|
798
|
+
* Applies a function to **every** element focused by the traversal.
|
|
799
|
+
*
|
|
800
|
+
* Available only on {@link Traversal}. Returns a function `(s: S) => S`.
|
|
801
|
+
* If the traversal cannot focus, the original `s` is returned unchanged.
|
|
802
|
+
*
|
|
803
|
+
* Unlike `.modify()`, which operates on the whole array, `modifyAll`
|
|
804
|
+
* maps `f` over each individual element.
|
|
805
|
+
*
|
|
806
|
+
* **Example** (doubling all focused values)
|
|
807
|
+
*
|
|
808
|
+
* ```ts
|
|
809
|
+
* import { Optic, Schema } from "effect"
|
|
810
|
+
*
|
|
811
|
+
* type S = { readonly items: ReadonlyArray<number> }
|
|
812
|
+
*
|
|
813
|
+
* const _positive = Optic.id<S>()
|
|
814
|
+
* .key("items")
|
|
815
|
+
* .forEach((n) => n.check(Schema.isGreaterThan(0)))
|
|
816
|
+
*
|
|
817
|
+
* const doubled = _positive.modifyAll((n) => n * 2)
|
|
818
|
+
*
|
|
819
|
+
* console.log(doubled({ items: [1, -2, 3] }))
|
|
820
|
+
* // Output: { items: [2, -2, 6] }
|
|
821
|
+
* ```
|
|
822
|
+
*
|
|
823
|
+
* @see `.forEach()` — create a sub-traversal
|
|
824
|
+
* @see {@link getAll} — extract focused elements
|
|
825
|
+
*/
|
|
163
826
|
modifyAll<S, A>(this: Traversal<S, A>, f: (a: A) => A): (s: S) => S;
|
|
164
827
|
}
|
|
165
828
|
/**
|
|
829
|
+
* Creates an {@link Optional} from a fallible getter and a fallible setter.
|
|
830
|
+
*
|
|
831
|
+
* When to use:
|
|
832
|
+
* - Both reading and writing can fail.
|
|
833
|
+
*
|
|
834
|
+
* Behavior:
|
|
835
|
+
* - Does not mutate inputs.
|
|
836
|
+
* - `getResult` should return `Result.fail(message)` on mismatch.
|
|
837
|
+
* - `set` should return `Result.fail(message)` when the update cannot be
|
|
838
|
+
* applied.
|
|
839
|
+
*
|
|
840
|
+
* **Example** (safe record key access)
|
|
841
|
+
*
|
|
842
|
+
* ```ts
|
|
843
|
+
* import { Optic, Result } from "effect"
|
|
844
|
+
*
|
|
845
|
+
* const atKey = (key: string) =>
|
|
846
|
+
* Optic.makeOptional<Record<string, number>, number>(
|
|
847
|
+
* (s) =>
|
|
848
|
+
* Object.hasOwn(s, key)
|
|
849
|
+
* ? Result.succeed(s[key])
|
|
850
|
+
* : Result.fail(`Key "${key}" not found`),
|
|
851
|
+
* (a, s) =>
|
|
852
|
+
* Object.hasOwn(s, key)
|
|
853
|
+
* ? Result.succeed({ ...s, [key]: a })
|
|
854
|
+
* : Result.fail(`Key "${key}" not found`)
|
|
855
|
+
* )
|
|
856
|
+
*
|
|
857
|
+
* console.log(Result.isSuccess(atKey("x").getResult({ x: 1 })))
|
|
858
|
+
* // Output: true
|
|
859
|
+
* ```
|
|
860
|
+
*
|
|
861
|
+
* @see {@link Optional} — the type this function returns
|
|
862
|
+
* @see {@link makeLens} — when reading always succeeds
|
|
863
|
+
* @see {@link makePrism} — when writing always succeeds
|
|
864
|
+
*
|
|
166
865
|
* @category Constructors
|
|
167
866
|
* @since 4.0.0
|
|
168
867
|
*/
|
|
169
868
|
export declare function makeOptional<S, A>(getResult: (s: S) => Result.Result<A, string>, set: (a: A, s: S) => Result.Result<S, string>): Optional<S, A>;
|
|
170
869
|
/**
|
|
870
|
+
* An optic that focuses on **zero or more** elements of type `A` inside `S`.
|
|
871
|
+
*
|
|
872
|
+
* When to use:
|
|
873
|
+
* - You want to read/update multiple elements at once (e.g. all items in
|
|
874
|
+
* an array, or a filtered subset).
|
|
875
|
+
*
|
|
876
|
+
* Behavior:
|
|
877
|
+
* - Technically `Optional<S, ReadonlyArray<A>>` — the focused value is an
|
|
878
|
+
* array of all matched elements.
|
|
879
|
+
* - Use `.forEach()` to add per-element sub-optics (filtering, drilling
|
|
880
|
+
* deeper).
|
|
881
|
+
* - Use `.modifyAll(f)` to map a function over every focused element.
|
|
882
|
+
* - Use {@link getAll} to extract all focused elements as a plain array.
|
|
883
|
+
*
|
|
884
|
+
* **Example** (traversing array elements with a filter)
|
|
885
|
+
*
|
|
886
|
+
* ```ts
|
|
887
|
+
* import { Optic, Schema } from "effect"
|
|
888
|
+
*
|
|
889
|
+
* type S = { readonly items: ReadonlyArray<number> }
|
|
890
|
+
*
|
|
891
|
+
* const _positive = Optic.id<S>()
|
|
892
|
+
* .key("items")
|
|
893
|
+
* .forEach((n) => n.check(Schema.isGreaterThan(0)))
|
|
894
|
+
*
|
|
895
|
+
* const getPositive = Optic.getAll(_positive)
|
|
896
|
+
*
|
|
897
|
+
* console.log(getPositive({ items: [1, -2, 3] }))
|
|
898
|
+
* // Output: [1, 3]
|
|
899
|
+
* ```
|
|
900
|
+
*
|
|
901
|
+
* @see {@link getAll} — extract focused elements
|
|
902
|
+
* @see {@link Optional} — the base type
|
|
903
|
+
*
|
|
171
904
|
* @category Traversal
|
|
172
905
|
* @since 4.0.0
|
|
173
906
|
*/
|
|
174
907
|
export interface Traversal<in out S, in out A> extends Optional<S, ReadonlyArray<A>> {
|
|
175
908
|
}
|
|
176
909
|
/**
|
|
177
|
-
* Returns all
|
|
910
|
+
* Returns a function that extracts all elements focused by a
|
|
911
|
+
* {@link Traversal} as a plain mutable array.
|
|
912
|
+
*
|
|
913
|
+
* When to use:
|
|
914
|
+
* - You need the focused values as a simple `Array<A>` for further
|
|
915
|
+
* processing.
|
|
916
|
+
*
|
|
917
|
+
* Behavior:
|
|
918
|
+
* - Returns an empty array when the traversal cannot focus.
|
|
919
|
+
* - Always returns a fresh array (safe to mutate).
|
|
920
|
+
* - Does not mutate the source.
|
|
921
|
+
*
|
|
922
|
+
* **Example** (collecting positive numbers)
|
|
923
|
+
*
|
|
924
|
+
* ```ts
|
|
925
|
+
* import { Optic, Schema } from "effect"
|
|
926
|
+
*
|
|
927
|
+
* type S = { readonly values: ReadonlyArray<number> }
|
|
928
|
+
*
|
|
929
|
+
* const _pos = Optic.id<S>()
|
|
930
|
+
* .key("values")
|
|
931
|
+
* .forEach((n) => n.check(Schema.isGreaterThan(0)))
|
|
932
|
+
*
|
|
933
|
+
* const getPositive = Optic.getAll(_pos)
|
|
934
|
+
*
|
|
935
|
+
* console.log(getPositive({ values: [3, -1, 5] }))
|
|
936
|
+
* // Output: [3, 5]
|
|
937
|
+
*
|
|
938
|
+
* console.log(getPositive({ values: [-1, -2] }))
|
|
939
|
+
* // Output: []
|
|
940
|
+
* ```
|
|
941
|
+
*
|
|
942
|
+
* @see {@link Traversal} — the optic type this operates on
|
|
178
943
|
*
|
|
179
944
|
* @category Traversal
|
|
180
945
|
* @since 4.0.0
|
|
181
946
|
*/
|
|
182
947
|
export declare function getAll<S, A>(traversal: Traversal<S, A>): (s: S) => Array<A>;
|
|
183
948
|
/**
|
|
184
|
-
* The identity
|
|
949
|
+
* The identity {@link Iso}. Focuses on the whole value unchanged.
|
|
950
|
+
*
|
|
951
|
+
* When to use:
|
|
952
|
+
* - As the starting point of an optic chain: `Optic.id<S>().key("x")...`
|
|
953
|
+
* - Anywhere an `Iso<S, S>` is needed.
|
|
954
|
+
*
|
|
955
|
+
* Behavior:
|
|
956
|
+
* - `get(s)` returns `s`.
|
|
957
|
+
* - `set(a)` returns `a`.
|
|
958
|
+
* - Singleton — every call returns the same instance.
|
|
959
|
+
*
|
|
960
|
+
* **Example** (starting an optic chain)
|
|
961
|
+
*
|
|
962
|
+
* ```ts
|
|
963
|
+
* import { Optic } from "effect"
|
|
964
|
+
*
|
|
965
|
+
* type S = { readonly x: number }
|
|
966
|
+
*
|
|
967
|
+
* const _x = Optic.id<S>().key("x")
|
|
968
|
+
*
|
|
969
|
+
* console.log(_x.get({ x: 42 }))
|
|
970
|
+
* // Output: 42
|
|
971
|
+
* ```
|
|
972
|
+
*
|
|
973
|
+
* @see {@link Iso} — the type this function returns
|
|
185
974
|
*
|
|
186
975
|
* @category Iso
|
|
187
976
|
* @since 4.0.0
|
|
188
977
|
*/
|
|
189
978
|
export declare function id<S>(): Iso<S, S>;
|
|
190
979
|
/**
|
|
980
|
+
* An {@link Iso} that converts a `Record<string, A>` to an array of
|
|
981
|
+
* `[key, value]` entries and back.
|
|
982
|
+
*
|
|
983
|
+
* When to use:
|
|
984
|
+
* - You want to traverse or manipulate record entries as an array (e.g.
|
|
985
|
+
* with `.forEach()`).
|
|
986
|
+
*
|
|
987
|
+
* Behavior:
|
|
988
|
+
* - `get` uses `Object.entries`.
|
|
989
|
+
* - `set` uses `Object.fromEntries`.
|
|
990
|
+
* - Round-trip is lossless for `Record<string, A>`.
|
|
991
|
+
*
|
|
992
|
+
* **Example** (traversing record values)
|
|
993
|
+
*
|
|
994
|
+
* ```ts
|
|
995
|
+
* import { Optic, Schema } from "effect"
|
|
996
|
+
*
|
|
997
|
+
* const _positiveValues = Optic.entries<number>()
|
|
998
|
+
* .forEach((entry) => entry.key(1).check(Schema.isGreaterThan(0)))
|
|
999
|
+
*
|
|
1000
|
+
* const inc = _positiveValues.modifyAll((n) => n + 1)
|
|
1001
|
+
*
|
|
1002
|
+
* console.log(inc({ a: 0, b: 3, c: -1 }))
|
|
1003
|
+
* // Output: { a: 0, b: 4, c: -1 }
|
|
1004
|
+
* ```
|
|
1005
|
+
*
|
|
1006
|
+
* @see {@link Iso} — the type this function returns
|
|
1007
|
+
* @see {@link id} — identity iso
|
|
1008
|
+
*
|
|
191
1009
|
* @category Iso
|
|
192
1010
|
* @since 4.0.0
|
|
193
1011
|
*/
|
|
194
1012
|
export declare function entries<A>(): Iso<Record<string, A>, ReadonlyArray<readonly [string, A]>>;
|
|
195
1013
|
/**
|
|
1014
|
+
* A {@link Prism} that focuses on the value inside `Option.Some`.
|
|
1015
|
+
*
|
|
1016
|
+
* When to use:
|
|
1017
|
+
* - You have an `Option<A>` and want to read/update the inner value only
|
|
1018
|
+
* when it is `Some`.
|
|
1019
|
+
*
|
|
1020
|
+
* Behavior:
|
|
1021
|
+
* - `getResult` fails with an error message when the option is `None`.
|
|
1022
|
+
* - `set(a)` wraps `a` in `Option.some(a)`.
|
|
1023
|
+
*
|
|
1024
|
+
* **Example** (accessing Some value)
|
|
1025
|
+
*
|
|
1026
|
+
* ```ts
|
|
1027
|
+
* import { Optic, Option, Result } from "effect"
|
|
1028
|
+
*
|
|
1029
|
+
* const _some = Optic.id<Option.Option<number>>().compose(Optic.some())
|
|
1030
|
+
*
|
|
1031
|
+
* console.log(Result.isSuccess(_some.getResult(Option.some(42))))
|
|
1032
|
+
* // Output: true
|
|
1033
|
+
*
|
|
1034
|
+
* console.log(Result.isFailure(_some.getResult(Option.none())))
|
|
1035
|
+
* // Output: true
|
|
1036
|
+
*
|
|
1037
|
+
* console.log(_some.set(10))
|
|
1038
|
+
* // Output: { _tag: "Some", value: 10 }
|
|
1039
|
+
* ```
|
|
1040
|
+
*
|
|
1041
|
+
* @see {@link none} — focuses on `None` instead
|
|
1042
|
+
* @see {@link Prism} — the type this function returns
|
|
1043
|
+
*
|
|
196
1044
|
* @category Prism
|
|
197
1045
|
* @since 4.0.0
|
|
198
1046
|
*/
|
|
199
1047
|
export declare function some<A>(): Prism<Option.Option<A>, A>;
|
|
200
1048
|
/**
|
|
1049
|
+
* A {@link Prism} that focuses on `Option.None`, exposing `undefined`.
|
|
1050
|
+
*
|
|
1051
|
+
* When to use:
|
|
1052
|
+
* - You want to match or construct `None` values within an optic chain.
|
|
1053
|
+
*
|
|
1054
|
+
* Behavior:
|
|
1055
|
+
* - `getResult` succeeds with `undefined` when the option is `None`.
|
|
1056
|
+
* - `getResult` fails when the option is `Some`.
|
|
1057
|
+
* - `set(undefined)` produces `Option.none()`.
|
|
1058
|
+
*
|
|
1059
|
+
* **Example** (matching None)
|
|
1060
|
+
*
|
|
1061
|
+
* ```ts
|
|
1062
|
+
* import { Optic, Option, Result } from "effect"
|
|
1063
|
+
*
|
|
1064
|
+
* const _none = Optic.id<Option.Option<number>>().compose(Optic.none())
|
|
1065
|
+
*
|
|
1066
|
+
* console.log(Result.isSuccess(_none.getResult(Option.none())))
|
|
1067
|
+
* // Output: true
|
|
1068
|
+
*
|
|
1069
|
+
* console.log(Result.isFailure(_none.getResult(Option.some(1))))
|
|
1070
|
+
* // Output: true
|
|
1071
|
+
* ```
|
|
1072
|
+
*
|
|
1073
|
+
* @see {@link some} — focuses on `Some` instead
|
|
1074
|
+
* @see {@link Prism} — the type this function returns
|
|
1075
|
+
*
|
|
201
1076
|
* @category Prism
|
|
202
1077
|
* @since 4.0.0
|
|
203
1078
|
*/
|
|
204
1079
|
export declare function none<A>(): Prism<Option.Option<A>, undefined>;
|
|
205
1080
|
/**
|
|
1081
|
+
* A {@link Prism} that focuses on the success value of a `Result`.
|
|
1082
|
+
*
|
|
1083
|
+
* When to use:
|
|
1084
|
+
* - You have a `Result<A, E>` and want to read/update `A` only when it
|
|
1085
|
+
* is a `Success`.
|
|
1086
|
+
*
|
|
1087
|
+
* Behavior:
|
|
1088
|
+
* - `getResult` fails when the result is a `Failure`.
|
|
1089
|
+
* - `set(a)` produces `Result.succeed(a)`.
|
|
1090
|
+
*
|
|
1091
|
+
* **Example** (accessing success)
|
|
1092
|
+
*
|
|
1093
|
+
* ```ts
|
|
1094
|
+
* import { Optic, Result } from "effect"
|
|
1095
|
+
*
|
|
1096
|
+
* const _ok = Optic.id<Result.Result<number, string>>().compose(Optic.success())
|
|
1097
|
+
*
|
|
1098
|
+
* console.log(Result.isSuccess(_ok.getResult(Result.succeed(42))))
|
|
1099
|
+
* // Output: true
|
|
1100
|
+
*
|
|
1101
|
+
* console.log(Result.isFailure(_ok.getResult(Result.fail("err"))))
|
|
1102
|
+
* // Output: true
|
|
1103
|
+
* ```
|
|
1104
|
+
*
|
|
1105
|
+
* @see {@link failure} — focuses on the failure side
|
|
1106
|
+
* @see {@link Prism} — the type this function returns
|
|
1107
|
+
*
|
|
206
1108
|
* @category Prism
|
|
207
1109
|
* @since 4.0.0
|
|
208
1110
|
*/
|
|
209
1111
|
export declare function success<A, E>(): Prism<Result.Result<A, E>, A>;
|
|
210
1112
|
/**
|
|
1113
|
+
* A {@link Prism} that focuses on the failure value of a `Result`.
|
|
1114
|
+
*
|
|
1115
|
+
* When to use:
|
|
1116
|
+
* - You have a `Result<A, E>` and want to read/update `E` only when it
|
|
1117
|
+
* is a `Failure`.
|
|
1118
|
+
*
|
|
1119
|
+
* Behavior:
|
|
1120
|
+
* - `getResult` fails when the result is a `Success`.
|
|
1121
|
+
* - `set(e)` produces `Result.fail(e)`.
|
|
1122
|
+
*
|
|
1123
|
+
* **Example** (accessing failure)
|
|
1124
|
+
*
|
|
1125
|
+
* ```ts
|
|
1126
|
+
* import { Optic, Result } from "effect"
|
|
1127
|
+
*
|
|
1128
|
+
* const _err = Optic.id<Result.Result<number, string>>().compose(Optic.failure())
|
|
1129
|
+
*
|
|
1130
|
+
* console.log(Result.isSuccess(_err.getResult(Result.fail("oops"))))
|
|
1131
|
+
* // Output: true
|
|
1132
|
+
*
|
|
1133
|
+
* console.log(Result.isFailure(_err.getResult(Result.succeed(42))))
|
|
1134
|
+
* // Output: true
|
|
1135
|
+
* ```
|
|
1136
|
+
*
|
|
1137
|
+
* @see {@link success} — focuses on the success side
|
|
1138
|
+
* @see {@link Prism} — the type this function returns
|
|
1139
|
+
*
|
|
211
1140
|
* @category Prism
|
|
212
1141
|
* @since 4.0.0
|
|
213
1142
|
*/
|