effect 4.0.0-beta.31 → 4.0.0-beta.33
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 +87 -86
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +47 -40
- package/dist/Array.js.map +1 -1
- package/dist/BigDecimal.d.ts +46 -45
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +35 -38
- 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 +32 -29
- package/dist/BigInt.js.map +1 -1
- package/dist/Chunk.d.ts +58 -57
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +20 -21
- package/dist/Chunk.js.map +1 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +4 -1
- package/dist/Config.js.map +1 -1
- package/dist/Cron.d.ts +3 -6
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +8 -15
- package/dist/Cron.js.map +1 -1
- package/dist/DateTime.d.ts +16 -15
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +8 -8
- package/dist/DateTime.js.map +1 -1
- package/dist/Deferred.d.ts +7 -5
- package/dist/Deferred.d.ts.map +1 -1
- package/dist/Deferred.js +7 -5
- package/dist/Deferred.js.map +1 -1
- package/dist/Duration.d.ts +26 -24
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +23 -22
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +7 -3
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +3 -4
- package/dist/Effect.js.map +1 -1
- package/dist/Fiber.d.ts +2 -1
- package/dist/Fiber.d.ts.map +1 -1
- package/dist/Fiber.js.map +1 -1
- package/dist/FiberHandle.d.ts +9 -8
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +8 -7
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +20 -19
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +6 -6
- package/dist/FiberMap.js.map +1 -1
- package/dist/FileSystem.d.ts +17 -16
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +10 -7
- package/dist/FileSystem.js.map +1 -1
- package/dist/Graph.d.ts +64 -64
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js +53 -53
- package/dist/Graph.js.map +1 -1
- package/dist/HashMap.d.ts +11 -5
- package/dist/HashMap.d.ts.map +1 -1
- package/dist/HashMap.js +3 -1
- package/dist/HashMap.js.map +1 -1
- package/dist/Iterable.d.ts +11 -11
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +12 -12
- package/dist/Iterable.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 +84 -0
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +27 -0
- package/dist/Layer.js.map +1 -1
- package/dist/Number.d.ts +74 -18
- package/dist/Number.d.ts.map +1 -1
- package/dist/Number.js +34 -15
- package/dist/Number.js.map +1 -1
- package/dist/Option.d.ts +2 -0
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.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/PubSub.d.ts +5 -4
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +6 -5
- package/dist/PubSub.js.map +1 -1
- package/dist/Queue.d.ts +4 -4
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +2 -2
- package/dist/Queue.js.map +1 -1
- package/dist/Record.d.ts +40 -40
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +16 -15
- package/dist/Record.js.map +1 -1
- package/dist/Scheduler.d.ts +25 -123
- package/dist/Scheduler.d.ts.map +1 -1
- package/dist/Scheduler.js +20 -123
- package/dist/Scheduler.js.map +1 -1
- package/dist/Schema.d.ts +30 -0
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +28 -1
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.js +6 -4
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +32 -27
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/Semaphore.d.ts +149 -53
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +137 -117
- package/dist/Semaphore.js.map +1 -1
- package/dist/ServiceMap.d.ts +26 -0
- package/dist/ServiceMap.d.ts.map +1 -1
- package/dist/ServiceMap.js +36 -21
- package/dist/ServiceMap.js.map +1 -1
- package/dist/Stream.js +1 -1
- 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/SubscriptionRef.d.ts +1 -2
- package/dist/SubscriptionRef.d.ts.map +1 -1
- package/dist/SubscriptionRef.js +81 -115
- package/dist/SubscriptionRef.js.map +1 -1
- package/dist/Terminal.d.ts +2 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js.map +1 -1
- package/dist/Tracer.d.ts +5 -4
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +2 -1
- package/dist/Tracer.js.map +1 -1
- package/dist/Trie.d.ts +26 -14
- package/dist/Trie.d.ts.map +1 -1
- package/dist/Trie.js +8 -4
- package/dist/Trie.js.map +1 -1
- package/dist/TxHashMap.d.ts +77 -59
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js +25 -19
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxSemaphore.d.ts +162 -2
- package/dist/TxSemaphore.d.ts.map +1 -1
- package/dist/TxSemaphore.js +16 -2
- package/dist/TxSemaphore.js.map +1 -1
- package/dist/index.d.ts +88 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -32
- package/dist/index.js.map +1 -1
- package/dist/internal/dateTime.js +9 -9
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +20 -89
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/hashMap.js +2 -1
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/option.js +6 -0
- package/dist/internal/option.js.map +1 -1
- package/dist/internal/trie.js +3 -3
- package/dist/internal/trie.js.map +1 -1
- package/dist/unstable/ai/AiError.js +1 -1
- package/dist/unstable/ai/AiError.js.map +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.d.ts.map +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.js +4 -0
- package/dist/unstable/ai/AnthropicStructuredOutput.js.map +1 -1
- package/dist/unstable/ai/Chat.d.ts.map +1 -1
- package/dist/unstable/ai/Chat.js +2 -2
- package/dist/unstable/ai/Chat.js.map +1 -1
- package/dist/unstable/ai/LanguageModel.d.ts +8 -0
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/LanguageModel.js +112 -11
- package/dist/unstable/ai/LanguageModel.js.map +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.d.ts.map +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.js +4 -0
- package/dist/unstable/ai/OpenAiStructuredOutput.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/Tool.d.ts +14 -0
- package/dist/unstable/ai/Tool.d.ts.map +1 -1
- package/dist/unstable/ai/Tool.js +13 -0
- package/dist/unstable/ai/Tool.js.map +1 -1
- package/dist/unstable/ai/index.d.ts +4 -0
- package/dist/unstable/ai/index.d.ts.map +1 -1
- package/dist/unstable/ai/index.js +4 -0
- package/dist/unstable/ai/index.js.map +1 -1
- package/dist/unstable/cli/Argument.d.ts +2 -4
- 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/CliOutput.d.ts +3 -2
- package/dist/unstable/cli/CliOutput.d.ts.map +1 -1
- package/dist/unstable/cli/CliOutput.js +4 -3
- package/dist/unstable/cli/CliOutput.js.map +1 -1
- package/dist/unstable/cli/Command.d.ts +3 -2
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +3 -3
- package/dist/unstable/cli/Command.js.map +1 -1
- package/dist/unstable/cli/Flag.d.ts +2 -2
- 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/HelpDoc.d.ts +14 -12
- package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
- package/dist/unstable/cli/Param.d.ts +4 -4
- package/dist/unstable/cli/Param.d.ts.map +1 -1
- package/dist/unstable/cli/Param.js +7 -7
- package/dist/unstable/cli/Param.js.map +1 -1
- package/dist/unstable/cli/Primitive.d.ts +1 -1
- package/dist/unstable/cli/Primitive.d.ts.map +1 -1
- package/dist/unstable/cli/Primitive.js.map +1 -1
- package/dist/unstable/cli/Prompt.js +71 -67
- package/dist/unstable/cli/Prompt.js.map +1 -1
- package/dist/unstable/cli/internal/completions/CommandDescriptor.js +9 -2
- package/dist/unstable/cli/internal/completions/CommandDescriptor.js.map +1 -1
- package/dist/unstable/cli/internal/parser.js +8 -3
- package/dist/unstable/cli/internal/parser.js.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts +3 -2
- package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.js +25 -23
- package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/unstable/cluster/Entity.d.ts +3 -2
- package/dist/unstable/cluster/Entity.d.ts.map +1 -1
- package/dist/unstable/cluster/Entity.js +7 -7
- package/dist/unstable/cluster/Entity.js.map +1 -1
- package/dist/unstable/cluster/Message.d.ts +4 -3
- package/dist/unstable/cluster/Message.d.ts.map +1 -1
- package/dist/unstable/cluster/Message.js +3 -2
- package/dist/unstable/cluster/Message.js.map +1 -1
- package/dist/unstable/cluster/MessageStorage.d.ts +10 -10
- package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/MessageStorage.js +12 -12
- package/dist/unstable/cluster/MessageStorage.js.map +1 -1
- package/dist/unstable/cluster/Reply.d.ts +2 -1
- package/dist/unstable/cluster/Reply.d.ts.map +1 -1
- package/dist/unstable/cluster/Reply.js +4 -3
- package/dist/unstable/cluster/Reply.js.map +1 -1
- package/dist/unstable/cluster/RunnerServer.d.ts.map +1 -1
- package/dist/unstable/cluster/RunnerServer.js +9 -8
- package/dist/unstable/cluster/RunnerServer.js.map +1 -1
- package/dist/unstable/cluster/Runners.d.ts +2 -1
- package/dist/unstable/cluster/Runners.d.ts.map +1 -1
- package/dist/unstable/cluster/Runners.js +7 -6
- package/dist/unstable/cluster/Runners.js.map +1 -1
- package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
- package/dist/unstable/cluster/Sharding.js +19 -13
- package/dist/unstable/cluster/Sharding.js.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.d.ts +5 -4
- package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.js +4 -4
- package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
- package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/SqlMessageStorage.js +19 -18
- package/dist/unstable/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/unstable/cluster/internal/entityManager.js +9 -10
- package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.d.ts +2 -1
- package/dist/unstable/devtools/DevToolsSchema.d.ts.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.js +1 -4
- package/dist/unstable/devtools/DevToolsSchema.js.map +1 -1
- package/dist/unstable/http/Cookies.d.ts +5 -4
- package/dist/unstable/http/Cookies.d.ts.map +1 -1
- package/dist/unstable/http/Cookies.js +3 -4
- package/dist/unstable/http/Cookies.js.map +1 -1
- package/dist/unstable/http/Etag.d.ts.map +1 -1
- package/dist/unstable/http/Etag.js +5 -1
- package/dist/unstable/http/Etag.js.map +1 -1
- package/dist/unstable/http/Headers.d.ts +3 -2
- package/dist/unstable/http/Headers.d.ts.map +1 -1
- package/dist/unstable/http/Headers.js +2 -1
- package/dist/unstable/http/Headers.js.map +1 -1
- package/dist/unstable/http/HttpClient.d.ts.map +1 -1
- package/dist/unstable/http/HttpClient.js +2 -1
- package/dist/unstable/http/HttpClient.js.map +1 -1
- package/dist/unstable/http/HttpClientRequest.d.ts +4 -3
- package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientRequest.js +8 -6
- package/dist/unstable/http/HttpClientRequest.js.map +1 -1
- package/dist/unstable/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientResponse.js +2 -1
- package/dist/unstable/http/HttpClientResponse.js.map +1 -1
- package/dist/unstable/http/HttpIncomingMessage.d.ts +2 -1
- package/dist/unstable/http/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/unstable/http/HttpIncomingMessage.js.map +1 -1
- package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/unstable/http/HttpMiddleware.js +16 -15
- package/dist/unstable/http/HttpMiddleware.js.map +1 -1
- package/dist/unstable/http/HttpPlatform.d.ts.map +1 -1
- package/dist/unstable/http/HttpPlatform.js +3 -2
- package/dist/unstable/http/HttpPlatform.js.map +1 -1
- package/dist/unstable/http/HttpRouter.d.ts +2 -1
- package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
- package/dist/unstable/http/HttpRouter.js +7 -7
- package/dist/unstable/http/HttpRouter.js.map +1 -1
- package/dist/unstable/http/HttpServer.d.ts.map +1 -1
- package/dist/unstable/http/HttpServer.js +2 -2
- package/dist/unstable/http/HttpServer.js.map +1 -1
- package/dist/unstable/http/HttpServerError.d.ts +2 -1
- package/dist/unstable/http/HttpServerError.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerError.js +2 -1
- package/dist/unstable/http/HttpServerError.js.map +1 -1
- package/dist/unstable/http/HttpServerRequest.d.ts +3 -2
- package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerRequest.js +14 -10
- package/dist/unstable/http/HttpServerRequest.js.map +1 -1
- package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerResponse.js +4 -3
- package/dist/unstable/http/HttpServerResponse.js.map +1 -1
- 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/UrlParams.d.ts +5 -4
- package/dist/unstable/http/UrlParams.d.ts.map +1 -1
- package/dist/unstable/http/UrlParams.js +5 -6
- package/dist/unstable/http/UrlParams.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.js +4 -2
- package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.d.ts +15 -0
- package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.js +81 -3
- package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
- package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpExporter.js +2 -2
- package/dist/unstable/observability/OtlpExporter.js.map +1 -1
- 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/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +1 -5
- package/dist/unstable/reactivity/Atom.js.map +1 -1
- package/dist/unstable/reactivity/AtomRegistry.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRegistry.js +4 -2
- package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
- package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
- package/dist/unstable/rpc/Rpc.js +4 -3
- package/dist/unstable/rpc/Rpc.js.map +1 -1
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +4 -4
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- package/dist/unstable/rpc/RpcSchema.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcSchema.js +3 -2
- 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 +4 -1
- package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +3 -2
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/dist/unstable/socket/Socket.d.ts +2 -1
- package/dist/unstable/socket/Socket.d.ts.map +1 -1
- package/dist/unstable/socket/Socket.js +5 -3
- package/dist/unstable/socket/Socket.js.map +1 -1
- package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
- package/dist/unstable/sql/SqlClient.js +1 -1
- package/dist/unstable/sql/SqlClient.js.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.js +6 -6
- package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
- package/dist/unstable/workflow/Workflow.d.ts +2 -1
- package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.d.ts +5 -4
- package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.js +19 -14
- package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +1 -1
- package/src/Array.ts +112 -105
- package/src/BigDecimal.ts +63 -66
- package/src/BigInt.ts +49 -41
- package/src/Chunk.ts +68 -63
- package/src/Config.ts +4 -1
- package/src/Cron.ts +10 -15
- package/src/DateTime.ts +16 -15
- package/src/Deferred.ts +8 -6
- package/src/Duration.ts +34 -33
- package/src/Effect.ts +12 -23
- package/src/Fiber.ts +2 -1
- package/src/FiberHandle.ts +10 -9
- package/src/FiberMap.ts +22 -22
- package/src/FileSystem.ts +25 -22
- package/src/Graph.ts +105 -105
- package/src/HashMap.ts +11 -5
- package/src/Iterable.ts +13 -13
- package/src/Latch.ts +85 -3
- package/src/Layer.ts +121 -0
- package/src/Number.ts +85 -26
- package/src/Option.ts +2 -0
- package/src/PartitionedSemaphore.ts +414 -0
- package/src/PubSub.ts +7 -6
- package/src/Queue.ts +6 -6
- package/src/Record.ts +52 -47
- package/src/Scheduler.ts +37 -126
- package/src/Schema.ts +49 -1
- package/src/SchemaGetter.ts +4 -4
- package/src/SchemaTransformation.ts +27 -27
- package/src/Semaphore.ts +271 -183
- package/src/ServiceMap.ts +83 -31
- package/src/Stream.ts +1 -1
- package/src/String.ts +122 -69
- package/src/SubscriptionRef.ts +96 -117
- package/src/Terminal.ts +2 -1
- package/src/Tracer.ts +6 -5
- package/src/Trie.ts +26 -14
- package/src/TxHashMap.ts +78 -60
- package/src/TxSemaphore.ts +186 -11
- package/src/index.ts +89 -33
- package/src/internal/dateTime.ts +14 -14
- package/src/internal/effect.ts +29 -121
- package/src/internal/hashMap.ts +4 -3
- package/src/internal/option.ts +7 -0
- package/src/internal/trie.ts +6 -6
- package/src/unstable/ai/AiError.ts +1 -1
- package/src/unstable/ai/AnthropicStructuredOutput.ts +4 -0
- package/src/unstable/ai/Chat.ts +6 -2
- package/src/unstable/ai/LanguageModel.ts +192 -65
- package/src/unstable/ai/OpenAiStructuredOutput.ts +4 -0
- package/src/unstable/ai/ResponseIdTracker.ts +97 -0
- package/src/unstable/ai/Tool.ts +20 -0
- package/src/unstable/ai/index.ts +5 -0
- package/src/unstable/cli/Argument.ts +2 -4
- package/src/unstable/cli/CliOutput.ts +7 -5
- package/src/unstable/cli/Command.ts +5 -5
- package/src/unstable/cli/Flag.ts +2 -2
- package/src/unstable/cli/HelpDoc.ts +14 -12
- package/src/unstable/cli/Param.ts +15 -11
- package/src/unstable/cli/Primitive.ts +1 -1
- package/src/unstable/cli/Prompt.ts +81 -83
- package/src/unstable/cli/internal/completions/CommandDescriptor.ts +3 -2
- package/src/unstable/cli/internal/parser.ts +7 -4
- package/src/unstable/cluster/ClusterWorkflowEngine.ts +35 -30
- package/src/unstable/cluster/Entity.ts +13 -12
- package/src/unstable/cluster/Message.ts +6 -5
- package/src/unstable/cluster/MessageStorage.ts +26 -25
- package/src/unstable/cluster/Reply.ts +7 -4
- package/src/unstable/cluster/RunnerServer.ts +10 -13
- package/src/unstable/cluster/Runners.ts +8 -7
- package/src/unstable/cluster/Sharding.ts +24 -17
- package/src/unstable/cluster/ShardingConfig.ts +6 -6
- package/src/unstable/cluster/SqlMessageStorage.ts +21 -18
- package/src/unstable/cluster/internal/entityManager.ts +27 -21
- package/src/unstable/devtools/DevToolsSchema.ts +3 -2
- package/src/unstable/http/Cookies.ts +7 -8
- package/src/unstable/http/Etag.ts +5 -3
- package/src/unstable/http/Headers.ts +6 -5
- package/src/unstable/http/HttpClient.ts +2 -1
- package/src/unstable/http/HttpClientRequest.ts +11 -9
- package/src/unstable/http/HttpClientResponse.ts +3 -2
- package/src/unstable/http/HttpIncomingMessage.ts +2 -1
- package/src/unstable/http/HttpMiddleware.ts +16 -15
- package/src/unstable/http/HttpPlatform.ts +3 -2
- package/src/unstable/http/HttpRouter.ts +9 -9
- package/src/unstable/http/HttpServer.ts +3 -9
- package/src/unstable/http/HttpServerError.ts +3 -2
- package/src/unstable/http/HttpServerRequest.ts +25 -21
- package/src/unstable/http/HttpServerResponse.ts +5 -4
- package/src/unstable/http/HttpTraceContext.ts +31 -17
- package/src/unstable/http/UrlParams.ts +11 -14
- package/src/unstable/httpapi/HttpApiBuilder.ts +9 -3
- package/src/unstable/httpapi/HttpApiError.ts +67 -12
- package/src/unstable/observability/OtlpExporter.ts +5 -2
- package/src/unstable/observability/OtlpTracer.ts +8 -4
- package/src/unstable/reactivity/Atom.ts +1 -4
- package/src/unstable/reactivity/AtomRegistry.ts +5 -3
- package/src/unstable/rpc/Rpc.ts +4 -3
- package/src/unstable/rpc/RpcClient.ts +10 -9
- package/src/unstable/rpc/RpcSchema.ts +6 -5
- package/src/unstable/rpc/RpcSerialization.ts +4 -1
- package/src/unstable/rpc/RpcServer.ts +3 -3
- package/src/unstable/socket/Socket.ts +14 -9
- package/src/unstable/sql/SqlClient.ts +5 -3
- package/src/unstable/workflow/DurableDeferred.ts +6 -6
- package/src/unstable/workflow/Workflow.ts +1 -1
- package/src/unstable/workflow/WorkflowEngine.ts +29 -20
- 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/src/NullOr.ts +0 -204
|
@@ -98,7 +98,7 @@ export class WorkflowEngine extends ServiceMap.Service<
|
|
|
98
98
|
workflow: Workflow.Workflow<Name, Payload, Success, Error>,
|
|
99
99
|
executionId: string
|
|
100
100
|
) => Effect.Effect<
|
|
101
|
-
Workflow.Result<Success["Type"], Error["Type"]
|
|
101
|
+
Option.Option<Workflow.Result<Success["Type"], Error["Type"]>>,
|
|
102
102
|
never,
|
|
103
103
|
Success["DecodingServices"] | Error["DecodingServices"]
|
|
104
104
|
>
|
|
@@ -147,7 +147,7 @@ export class WorkflowEngine extends ServiceMap.Service<
|
|
|
147
147
|
>(
|
|
148
148
|
deferred: DurableDeferred.DurableDeferred<Success, Error>
|
|
149
149
|
) => Effect.Effect<
|
|
150
|
-
Exit.Exit<Success["Type"], Error["Type"]
|
|
150
|
+
Option.Option<Exit.Exit<Success["Type"], Error["Type"]>>,
|
|
151
151
|
never,
|
|
152
152
|
WorkflowInstance
|
|
153
153
|
>
|
|
@@ -277,7 +277,7 @@ export interface Encoded {
|
|
|
277
277
|
readonly poll: (
|
|
278
278
|
workflow: Workflow.Any,
|
|
279
279
|
executionId: string
|
|
280
|
-
) => Effect.Effect<Workflow.Result<unknown, unknown
|
|
280
|
+
) => Effect.Effect<Option.Option<Workflow.Result<unknown, unknown>>>
|
|
281
281
|
readonly interrupt: (
|
|
282
282
|
workflow: Workflow.Any,
|
|
283
283
|
executionId: string
|
|
@@ -297,7 +297,7 @@ export interface Encoded {
|
|
|
297
297
|
readonly deferredResult: (
|
|
298
298
|
deferred: DurableDeferred.Any
|
|
299
299
|
) => Effect.Effect<
|
|
300
|
-
Exit.Exit<unknown, unknown
|
|
300
|
+
Option.Option<Exit.Exit<unknown, unknown>>,
|
|
301
301
|
never,
|
|
302
302
|
WorkflowInstance
|
|
303
303
|
>
|
|
@@ -354,14 +354,14 @@ export const makeUnsafe = (options: Encoded): WorkflowEngine["Service"] =>
|
|
|
354
354
|
const executionId = opts.executionId
|
|
355
355
|
const suspendedRetrySchedule = opts.suspendedRetrySchedule ?? defaultRetrySchedule
|
|
356
356
|
yield* Effect.annotateCurrentSpan({ executionId })
|
|
357
|
-
let result
|
|
357
|
+
let result = Option.none<Workflow.Result<Success["Type"], Error["Type"]>>()
|
|
358
358
|
|
|
359
359
|
// link interruption with parent workflow
|
|
360
360
|
const parentInstance = yield* Effect.serviceOption(WorkflowInstance)
|
|
361
361
|
if (Option.isSome(parentInstance)) {
|
|
362
362
|
const instance = parentInstance.value
|
|
363
363
|
yield* Effect.addFinalizer(() => {
|
|
364
|
-
if (!instance.interrupted || result
|
|
364
|
+
if (!instance.interrupted || (Option.isSome(result) && result.value._tag === "Complete")) {
|
|
365
365
|
return Effect.void
|
|
366
366
|
}
|
|
367
367
|
return options.interrupt(self, executionId)
|
|
@@ -384,21 +384,23 @@ export const makeUnsafe = (options: Encoded): WorkflowEngine["Service"] =>
|
|
|
384
384
|
parent: Option.getOrUndefined(parentInstance)
|
|
385
385
|
})
|
|
386
386
|
if (Option.isSome(parentInstance)) {
|
|
387
|
-
|
|
387
|
+
const wrapped = yield* Workflow.wrapActivityResult(
|
|
388
388
|
run,
|
|
389
389
|
(result) => result._tag === "Suspended"
|
|
390
390
|
)
|
|
391
|
-
|
|
391
|
+
result = Option.some(wrapped)
|
|
392
|
+
if (wrapped._tag === "Suspended") {
|
|
392
393
|
return yield* Workflow.suspend(parentInstance.value)
|
|
393
394
|
}
|
|
394
|
-
return yield*
|
|
395
|
+
return yield* wrapped.exit
|
|
395
396
|
}
|
|
396
397
|
|
|
397
398
|
let sleep: Effect.Effect<any> | undefined
|
|
398
399
|
while (true) {
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
400
|
+
const wrapped = yield* run
|
|
401
|
+
result = Option.some(wrapped)
|
|
402
|
+
if (wrapped._tag === "Complete") {
|
|
403
|
+
return yield* wrapped.exit as Exit.Exit<any>
|
|
402
404
|
}
|
|
403
405
|
sleep ??= (yield* Schedule.toStepWithSleep(suspendedRetrySchedule))(
|
|
404
406
|
void 0
|
|
@@ -438,12 +440,14 @@ export const makeUnsafe = (options: Encoded): WorkflowEngine["Service"] =>
|
|
|
438
440
|
executionId: instance.executionId
|
|
439
441
|
})
|
|
440
442
|
const exit = yield* options.deferredResult(deferred)
|
|
441
|
-
if (exit
|
|
442
|
-
return
|
|
443
|
+
if (Option.isNone(exit)) {
|
|
444
|
+
return Option.none()
|
|
443
445
|
}
|
|
444
|
-
return
|
|
445
|
-
|
|
446
|
-
|
|
446
|
+
return Option.some(
|
|
447
|
+
yield* Effect.orDie(
|
|
448
|
+
Schema.decodeEffect(deferred.exitSchema)(toJsonExit(exit.value))
|
|
449
|
+
) as Effect.Effect<Exit.Exit<Success["Type"], Error["Type"]>>
|
|
450
|
+
)
|
|
447
451
|
},
|
|
448
452
|
Effect.withSpan(
|
|
449
453
|
"WorkflowEngine.deferredResult",
|
|
@@ -646,15 +650,20 @@ export const layerMemory: Layer.Layer<WorkflowEngine> = Layer.effect(WorkflowEng
|
|
|
646
650
|
Effect.suspend(() => {
|
|
647
651
|
const state = executions.get(executionId)
|
|
648
652
|
if (!state) {
|
|
649
|
-
return Effect.
|
|
653
|
+
return Effect.succeedNone
|
|
650
654
|
}
|
|
651
655
|
const exit = state.fiber?.pollUnsafe()
|
|
652
|
-
|
|
656
|
+
if (!exit) {
|
|
657
|
+
return Effect.succeedNone
|
|
658
|
+
}
|
|
659
|
+
return exit._tag === "Success"
|
|
660
|
+
? Effect.succeedSome(exit.value)
|
|
661
|
+
: Effect.die(exit.cause)
|
|
653
662
|
}),
|
|
654
663
|
deferredResult: Effect.fnUntraced(function*(deferred) {
|
|
655
664
|
const instance = yield* WorkflowInstance
|
|
656
665
|
const id = `${instance.executionId}/${deferred.name}`
|
|
657
|
-
return deferredResults.get(id)
|
|
666
|
+
return Option.fromNullishOr(deferredResults.get(id))
|
|
658
667
|
}),
|
|
659
668
|
deferredDone: (options) =>
|
|
660
669
|
Effect.suspend(() => {
|
package/dist/NullOr.d.ts
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This module provides small, allocation-free utilities for working with values of type
|
|
3
|
-
* `A | null`, where `null` means "no value".
|
|
4
|
-
*
|
|
5
|
-
* Why not `Option<A>`?
|
|
6
|
-
* In TypeScript, `Option<A>` is often unnecessary. If `null` already models absence
|
|
7
|
-
* in your domain, using `A | null` keeps types simple, avoids extra wrappers, and
|
|
8
|
-
* reduces overhead. The key is that `A` itself must not include `null`; in this
|
|
9
|
-
* module `null` is reserved to mean "no value".
|
|
10
|
-
*
|
|
11
|
-
* When to use `A | null`:
|
|
12
|
-
* - Absence can be represented by `null` in your domain model.
|
|
13
|
-
* - You do not need to distinguish between "no value" and "value is null".
|
|
14
|
-
* - You want straightforward ergonomics and zero extra allocations.
|
|
15
|
-
*
|
|
16
|
-
* When to prefer `Option<A>`:
|
|
17
|
-
* - You must distinguish `None` from `Some(null)` (that is, `null` is a valid
|
|
18
|
-
* payload and carries meaning on its own).
|
|
19
|
-
* - You need a tagged representation for serialization or pattern matching across
|
|
20
|
-
* boundaries where `null` would be ambiguous.
|
|
21
|
-
* - You want the richer `Option` API and are comfortable with the extra wrapper.
|
|
22
|
-
*
|
|
23
|
-
* Lawfulness note:
|
|
24
|
-
* All helpers treat `null` as absence. Do not use these utilities with payloads
|
|
25
|
-
* where `A` can itself be `null`, or you will lose information. If you need to
|
|
26
|
-
* carry `null` as a valid payload, use `Option<A>` instead.
|
|
27
|
-
*
|
|
28
|
-
* @since 4.0.0
|
|
29
|
-
*/
|
|
30
|
-
import * as Combiner from "./Combiner.ts";
|
|
31
|
-
import type { LazyArg } from "./Function.ts";
|
|
32
|
-
import * as Reducer from "./Reducer.ts";
|
|
33
|
-
/**
|
|
34
|
-
* @since 4.0.0
|
|
35
|
-
*/
|
|
36
|
-
export declare const map: {
|
|
37
|
-
/**
|
|
38
|
-
* @since 4.0.0
|
|
39
|
-
*/
|
|
40
|
-
<A, B>(f: (a: A) => B): (self: A | null) => B | null;
|
|
41
|
-
/**
|
|
42
|
-
* @since 4.0.0
|
|
43
|
-
*/
|
|
44
|
-
<A, B>(self: A | null, f: (a: A) => B): B | null;
|
|
45
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* @since 4.0.0
|
|
48
|
-
*/
|
|
49
|
-
export declare const match: {
|
|
50
|
-
/**
|
|
51
|
-
* @since 4.0.0
|
|
52
|
-
*/
|
|
53
|
-
<B, A, C = B>(options: {
|
|
54
|
-
readonly onNull: LazyArg<B>;
|
|
55
|
-
readonly onNotNull: (a: A) => C;
|
|
56
|
-
}): (self: A | null) => B | C;
|
|
57
|
-
/**
|
|
58
|
-
* @since 4.0.0
|
|
59
|
-
*/
|
|
60
|
-
<A, B, C = B>(self: A | null, options: {
|
|
61
|
-
readonly onNull: LazyArg<B>;
|
|
62
|
-
readonly onNotNull: (a: A) => C;
|
|
63
|
-
}): B | C;
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* @since 4.0.0
|
|
67
|
-
*/
|
|
68
|
-
export declare const getOrThrowWith: {
|
|
69
|
-
/**
|
|
70
|
-
* @since 4.0.0
|
|
71
|
-
*/
|
|
72
|
-
(onNull: () => unknown): <A>(self: A | null) => A;
|
|
73
|
-
/**
|
|
74
|
-
* @since 4.0.0
|
|
75
|
-
*/
|
|
76
|
-
<A>(self: A | null, onNull: () => unknown): A;
|
|
77
|
-
};
|
|
78
|
-
/**
|
|
79
|
-
* @since 4.0.0
|
|
80
|
-
*/
|
|
81
|
-
export declare const getOrThrow: <A>(self: A | null) => A;
|
|
82
|
-
/**
|
|
83
|
-
* @since 4.0.0
|
|
84
|
-
*/
|
|
85
|
-
export declare const liftThrowable: <A extends ReadonlyArray<unknown>, B>(f: (...a: A) => B) => (...a: A) => B | null;
|
|
86
|
-
/**
|
|
87
|
-
* Creates a `Reducer` for `NullOr<A>` that prioritizes the first non-`null`
|
|
88
|
-
* value and combines values when both operands are present.
|
|
89
|
-
*
|
|
90
|
-
* This `Reducer` is useful for scenarios where you want to:
|
|
91
|
-
* - Take the first available value (like a fallback chain)
|
|
92
|
-
* - Combine values when both are present
|
|
93
|
-
* - Maintain a `null` state only when all values are `null`
|
|
94
|
-
*
|
|
95
|
-
* The `initialValue` of the `Reducer` is `null`.
|
|
96
|
-
*
|
|
97
|
-
* **Behavior:**
|
|
98
|
-
* - `null` + `null` = `null`
|
|
99
|
-
* - `a` + `null` = `a` (first value wins)
|
|
100
|
-
* - `null` + `b` = `b` (second value wins)
|
|
101
|
-
* - `a` + `b` = `a + b` (values combined)
|
|
102
|
-
*
|
|
103
|
-
* @since 4.0.0
|
|
104
|
-
*/
|
|
105
|
-
export declare function makeReducer<A>(combiner: Combiner.Combiner<A>): Reducer.Reducer<A | null>;
|
|
106
|
-
/**
|
|
107
|
-
* Creates a `Combiner` for `NullOr<A>` that only combines values when both
|
|
108
|
-
* operands are not `null`, failing fast if either is `null`.
|
|
109
|
-
*
|
|
110
|
-
* This `Combiner` is useful for scenarios where you need both values to be
|
|
111
|
-
* present to perform an operation, such as:
|
|
112
|
-
* - Mathematical operations that require two operands
|
|
113
|
-
* - Data validation that needs both fields
|
|
114
|
-
* - Operations that can't proceed with partial data
|
|
115
|
-
*
|
|
116
|
-
* **Behavior:**
|
|
117
|
-
* - `null` + `null` = `null`
|
|
118
|
-
* - `a` + `null` = `null` (fails fast)
|
|
119
|
-
* - `null` + `b` = `null` (fails fast)
|
|
120
|
-
* - `a` + `b` = `a + b` (values combined)
|
|
121
|
-
*
|
|
122
|
-
* @see {@link makeReducerFailFast} if you have a `Reducer` and want to lift it
|
|
123
|
-
* to `NullOr` values.
|
|
124
|
-
*
|
|
125
|
-
* @since 4.0.0
|
|
126
|
-
*/
|
|
127
|
-
export declare function makeCombinerFailFast<A>(combiner: Combiner.Combiner<A>): Combiner.Combiner<A | null>;
|
|
128
|
-
/**
|
|
129
|
-
* Creates a `Reducer` for `NullOr<A>` by wrapping an existing `Reducer` with
|
|
130
|
-
* fail-fast semantics for `NullOr` values.
|
|
131
|
-
*
|
|
132
|
-
* This function lifts a regular `Reducer` into the `NullOr` context, allowing
|
|
133
|
-
* you to use existing `Reducer`s with `NullOr` values while maintaining the
|
|
134
|
-
* fail-fast behavior where any `null` value causes the entire reduction to fail.
|
|
135
|
-
*
|
|
136
|
-
* The initial value is `some(reducer.initialValue)`, ensuring the `Reducer`
|
|
137
|
-
* starts with a valid `NullOr` value.
|
|
138
|
-
*
|
|
139
|
-
* **Behavior:**
|
|
140
|
-
* - Fails fast (returns `null`) if any operand is `null`
|
|
141
|
-
* - Uses the underlying reducer's combine logic when both values are present
|
|
142
|
-
*
|
|
143
|
-
* @see {@link makeCombinerFailFast} if you only have a `Combiner` and want to
|
|
144
|
-
* lift it to `NullOr` values.
|
|
145
|
-
*
|
|
146
|
-
* @since 4.0.0
|
|
147
|
-
*/
|
|
148
|
-
export declare function makeReducerFailFast<A>(reducer: Reducer.Reducer<A>): Reducer.Reducer<A | null>;
|
|
149
|
-
//# sourceMappingURL=NullOr.d.ts.map
|
package/dist/NullOr.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NullOr.d.ts","sourceRoot":"","sources":["../src/NullOr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;GAEG;AACH,eAAO,MAAM,GAAG,EAAE;IAChB;;OAEG;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,CAAA;IACpD;;OAEG;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;CACQ,CAAA;AAE1D;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE;IAClB;;OAEG;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EACV,OAAO,EAAE;QACP,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;QAC3B,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;KAChC,GACA,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B;;OAEG;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EACV,IAAI,EAAE,CAAC,GAAG,IAAI,EACd,OAAO,EAAE;QACP,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;QAC3B,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;KAChC,GACA,CAAC,GAAG,CAAC,CAAA;CAOT,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE;IAC3B;;OAEG;IACH,CAAC,MAAM,EAAE,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,CAAA;IACjD;;OAEG;IACH,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,GAAG,CAAC,CAAA;CAM7C,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,CAAkE,CAAA;AAElH;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,EAC/D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAChB,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAOnB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAMxF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAKnG;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAW7F"}
|
package/dist/NullOr.js
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This module provides small, allocation-free utilities for working with values of type
|
|
3
|
-
* `A | null`, where `null` means "no value".
|
|
4
|
-
*
|
|
5
|
-
* Why not `Option<A>`?
|
|
6
|
-
* In TypeScript, `Option<A>` is often unnecessary. If `null` already models absence
|
|
7
|
-
* in your domain, using `A | null` keeps types simple, avoids extra wrappers, and
|
|
8
|
-
* reduces overhead. The key is that `A` itself must not include `null`; in this
|
|
9
|
-
* module `null` is reserved to mean "no value".
|
|
10
|
-
*
|
|
11
|
-
* When to use `A | null`:
|
|
12
|
-
* - Absence can be represented by `null` in your domain model.
|
|
13
|
-
* - You do not need to distinguish between "no value" and "value is null".
|
|
14
|
-
* - You want straightforward ergonomics and zero extra allocations.
|
|
15
|
-
*
|
|
16
|
-
* When to prefer `Option<A>`:
|
|
17
|
-
* - You must distinguish `None` from `Some(null)` (that is, `null` is a valid
|
|
18
|
-
* payload and carries meaning on its own).
|
|
19
|
-
* - You need a tagged representation for serialization or pattern matching across
|
|
20
|
-
* boundaries where `null` would be ambiguous.
|
|
21
|
-
* - You want the richer `Option` API and are comfortable with the extra wrapper.
|
|
22
|
-
*
|
|
23
|
-
* Lawfulness note:
|
|
24
|
-
* All helpers treat `null` as absence. Do not use these utilities with payloads
|
|
25
|
-
* where `A` can itself be `null`, or you will lose information. If you need to
|
|
26
|
-
* carry `null` as a valid payload, use `Option<A>` instead.
|
|
27
|
-
*
|
|
28
|
-
* @since 4.0.0
|
|
29
|
-
*/
|
|
30
|
-
import * as Combiner from "./Combiner.js";
|
|
31
|
-
import { dual } from "./Function.js";
|
|
32
|
-
import * as Reducer from "./Reducer.js";
|
|
33
|
-
/**
|
|
34
|
-
* @since 4.0.0
|
|
35
|
-
*/
|
|
36
|
-
export const map = /*#__PURE__*/dual(2, (self, f) => self === null ? null : f(self));
|
|
37
|
-
/**
|
|
38
|
-
* @since 4.0.0
|
|
39
|
-
*/
|
|
40
|
-
export const match = /*#__PURE__*/dual(2, (self, {
|
|
41
|
-
onNotNull,
|
|
42
|
-
onNull
|
|
43
|
-
}) => self === null ? onNull() : onNotNull(self));
|
|
44
|
-
/**
|
|
45
|
-
* @since 4.0.0
|
|
46
|
-
*/
|
|
47
|
-
export const getOrThrowWith = /*#__PURE__*/dual(2, (self, onNull) => {
|
|
48
|
-
if (self !== null) {
|
|
49
|
-
return self;
|
|
50
|
-
}
|
|
51
|
-
throw onNull();
|
|
52
|
-
});
|
|
53
|
-
/**
|
|
54
|
-
* @since 4.0.0
|
|
55
|
-
*/
|
|
56
|
-
export const getOrThrow = /*#__PURE__*/getOrThrowWith(() => new Error("getOrThrow called on a null"));
|
|
57
|
-
/**
|
|
58
|
-
* @since 4.0.0
|
|
59
|
-
*/
|
|
60
|
-
export const liftThrowable = f => (...a) => {
|
|
61
|
-
try {
|
|
62
|
-
return f(...a);
|
|
63
|
-
} catch {
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* Creates a `Reducer` for `NullOr<A>` that prioritizes the first non-`null`
|
|
69
|
-
* value and combines values when both operands are present.
|
|
70
|
-
*
|
|
71
|
-
* This `Reducer` is useful for scenarios where you want to:
|
|
72
|
-
* - Take the first available value (like a fallback chain)
|
|
73
|
-
* - Combine values when both are present
|
|
74
|
-
* - Maintain a `null` state only when all values are `null`
|
|
75
|
-
*
|
|
76
|
-
* The `initialValue` of the `Reducer` is `null`.
|
|
77
|
-
*
|
|
78
|
-
* **Behavior:**
|
|
79
|
-
* - `null` + `null` = `null`
|
|
80
|
-
* - `a` + `null` = `a` (first value wins)
|
|
81
|
-
* - `null` + `b` = `b` (second value wins)
|
|
82
|
-
* - `a` + `b` = `a + b` (values combined)
|
|
83
|
-
*
|
|
84
|
-
* @since 4.0.0
|
|
85
|
-
*/
|
|
86
|
-
export function makeReducer(combiner) {
|
|
87
|
-
return Reducer.make((self, that) => {
|
|
88
|
-
if (self === null) return that;
|
|
89
|
-
if (that === null) return self;
|
|
90
|
-
return combiner.combine(self, that);
|
|
91
|
-
}, null);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Creates a `Combiner` for `NullOr<A>` that only combines values when both
|
|
95
|
-
* operands are not `null`, failing fast if either is `null`.
|
|
96
|
-
*
|
|
97
|
-
* This `Combiner` is useful for scenarios where you need both values to be
|
|
98
|
-
* present to perform an operation, such as:
|
|
99
|
-
* - Mathematical operations that require two operands
|
|
100
|
-
* - Data validation that needs both fields
|
|
101
|
-
* - Operations that can't proceed with partial data
|
|
102
|
-
*
|
|
103
|
-
* **Behavior:**
|
|
104
|
-
* - `null` + `null` = `null`
|
|
105
|
-
* - `a` + `null` = `null` (fails fast)
|
|
106
|
-
* - `null` + `b` = `null` (fails fast)
|
|
107
|
-
* - `a` + `b` = `a + b` (values combined)
|
|
108
|
-
*
|
|
109
|
-
* @see {@link makeReducerFailFast} if you have a `Reducer` and want to lift it
|
|
110
|
-
* to `NullOr` values.
|
|
111
|
-
*
|
|
112
|
-
* @since 4.0.0
|
|
113
|
-
*/
|
|
114
|
-
export function makeCombinerFailFast(combiner) {
|
|
115
|
-
return Combiner.make((self, that) => {
|
|
116
|
-
if (self === null || that === null) return null;
|
|
117
|
-
return combiner.combine(self, that);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Creates a `Reducer` for `NullOr<A>` by wrapping an existing `Reducer` with
|
|
122
|
-
* fail-fast semantics for `NullOr` values.
|
|
123
|
-
*
|
|
124
|
-
* This function lifts a regular `Reducer` into the `NullOr` context, allowing
|
|
125
|
-
* you to use existing `Reducer`s with `NullOr` values while maintaining the
|
|
126
|
-
* fail-fast behavior where any `null` value causes the entire reduction to fail.
|
|
127
|
-
*
|
|
128
|
-
* The initial value is `some(reducer.initialValue)`, ensuring the `Reducer`
|
|
129
|
-
* starts with a valid `NullOr` value.
|
|
130
|
-
*
|
|
131
|
-
* **Behavior:**
|
|
132
|
-
* - Fails fast (returns `null`) if any operand is `null`
|
|
133
|
-
* - Uses the underlying reducer's combine logic when both values are present
|
|
134
|
-
*
|
|
135
|
-
* @see {@link makeCombinerFailFast} if you only have a `Combiner` and want to
|
|
136
|
-
* lift it to `NullOr` values.
|
|
137
|
-
*
|
|
138
|
-
* @since 4.0.0
|
|
139
|
-
*/
|
|
140
|
-
export function makeReducerFailFast(reducer) {
|
|
141
|
-
const combine = makeCombinerFailFast(reducer).combine;
|
|
142
|
-
const initialValue = reducer.initialValue;
|
|
143
|
-
return Reducer.make(combine, initialValue, collection => {
|
|
144
|
-
let out = initialValue;
|
|
145
|
-
for (const value of collection) {
|
|
146
|
-
out = combine(out, value);
|
|
147
|
-
if (out === null) return out;
|
|
148
|
-
}
|
|
149
|
-
return out;
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
//# sourceMappingURL=NullOr.js.map
|
package/dist/NullOr.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NullOr.js","names":["Combiner","dual","Reducer","map","self","f","match","onNotNull","onNull","getOrThrowWith","getOrThrow","Error","liftThrowable","a","makeReducer","combiner","make","that","combine","makeCombinerFailFast","makeReducerFailFast","reducer","initialValue","collection","out","value"],"sources":["../src/NullOr.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,OAAO,KAAKA,QAAQ,MAAM,eAAe;AAEzC,SAASC,IAAI,QAAQ,eAAe;AACpC,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,MAAMC,GAAG,gBASZF,IAAI,CAAC,CAAC,EAAE,CAACG,IAAI,EAAEC,CAAC,KAAMD,IAAI,KAAK,IAAI,GAAG,IAAI,GAAGC,CAAC,CAACD,IAAI,CAAE,CAAC;AAE1D;;;AAGA,OAAO,MAAME,KAAK,gBAoBdL,IAAI,CACN,CAAC,EACD,CAAcG,IAAc,EAAE;EAAEG,SAAS;EAAEC;AAAM,CAGhD,KAAYJ,IAAI,KAAK,IAAI,GAAGI,MAAM,EAAE,GAAGD,SAAS,CAACH,IAAI,CAAC,CACxD;AAED;;;AAGA,OAAO,MAAMK,cAAc,gBASvBR,IAAI,CAAC,CAAC,EAAE,CAAIG,IAAc,EAAEI,MAAqB,KAAO;EAC1D,IAAIJ,IAAI,KAAK,IAAI,EAAE;IACjB,OAAOA,IAAI;EACb;EACA,MAAMI,MAAM,EAAE;AAChB,CAAC,CAAC;AAEF;;;AAGA,OAAO,MAAME,UAAU,gBAA6BD,cAAc,CAAC,MAAM,IAAIE,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAElH;;;AAGA,OAAO,MAAMC,aAAa,GACxBP,CAAiB,IAEnB,CAAC,GAAGQ,CAAC,KAAI;EACP,IAAI;IACF,OAAOR,CAAC,CAAC,GAAGQ,CAAC,CAAC;EAChB,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF,CAAC;AAED;;;;;;;;;;;;;;;;;;;AAmBA,OAAM,SAAUC,WAAWA,CAAIC,QAA8B;EAC3D,OAAOb,OAAO,CAACc,IAAI,CAAC,CAACZ,IAAI,EAAEa,IAAI,KAAI;IACjC,IAAIb,IAAI,KAAK,IAAI,EAAE,OAAOa,IAAI;IAC9B,IAAIA,IAAI,KAAK,IAAI,EAAE,OAAOb,IAAI;IAC9B,OAAOW,QAAQ,CAACG,OAAO,CAACd,IAAI,EAAEa,IAAI,CAAC;EACrC,CAAC,EAAE,IAAgB,CAAC;AACtB;AAEA;;;;;;;;;;;;;;;;;;;;;AAqBA,OAAM,SAAUE,oBAAoBA,CAAIJ,QAA8B;EACpE,OAAOf,QAAQ,CAACgB,IAAI,CAAC,CAACZ,IAAI,EAAEa,IAAI,KAAI;IAClC,IAAIb,IAAI,KAAK,IAAI,IAAIa,IAAI,KAAK,IAAI,EAAE,OAAO,IAAI;IAC/C,OAAOF,QAAQ,CAACG,OAAO,CAACd,IAAI,EAAEa,IAAI,CAAC;EACrC,CAAC,CAAC;AACJ;AAEA;;;;;;;;;;;;;;;;;;;;AAoBA,OAAM,SAAUG,mBAAmBA,CAAIC,OAA2B;EAChE,MAAMH,OAAO,GAAGC,oBAAoB,CAACE,OAAO,CAAC,CAACH,OAAO;EACrD,MAAMI,YAAY,GAAGD,OAAO,CAACC,YAAwB;EACrD,OAAOpB,OAAO,CAACc,IAAI,CAACE,OAAO,EAAEI,YAAY,EAAGC,UAAU,IAAI;IACxD,IAAIC,GAAG,GAAGF,YAAY;IACtB,KAAK,MAAMG,KAAK,IAAIF,UAAU,EAAE;MAC9BC,GAAG,GAAGN,OAAO,CAACM,GAAG,EAAEC,KAAK,CAAC;MACzB,IAAID,GAAG,KAAK,IAAI,EAAE,OAAOA,GAAG;IAC9B;IACA,OAAOA,GAAG;EACZ,CAAC,CAAC;AACJ","ignoreList":[]}
|
package/src/NullOr.ts
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This module provides small, allocation-free utilities for working with values of type
|
|
3
|
-
* `A | null`, where `null` means "no value".
|
|
4
|
-
*
|
|
5
|
-
* Why not `Option<A>`?
|
|
6
|
-
* In TypeScript, `Option<A>` is often unnecessary. If `null` already models absence
|
|
7
|
-
* in your domain, using `A | null` keeps types simple, avoids extra wrappers, and
|
|
8
|
-
* reduces overhead. The key is that `A` itself must not include `null`; in this
|
|
9
|
-
* module `null` is reserved to mean "no value".
|
|
10
|
-
*
|
|
11
|
-
* When to use `A | null`:
|
|
12
|
-
* - Absence can be represented by `null` in your domain model.
|
|
13
|
-
* - You do not need to distinguish between "no value" and "value is null".
|
|
14
|
-
* - You want straightforward ergonomics and zero extra allocations.
|
|
15
|
-
*
|
|
16
|
-
* When to prefer `Option<A>`:
|
|
17
|
-
* - You must distinguish `None` from `Some(null)` (that is, `null` is a valid
|
|
18
|
-
* payload and carries meaning on its own).
|
|
19
|
-
* - You need a tagged representation for serialization or pattern matching across
|
|
20
|
-
* boundaries where `null` would be ambiguous.
|
|
21
|
-
* - You want the richer `Option` API and are comfortable with the extra wrapper.
|
|
22
|
-
*
|
|
23
|
-
* Lawfulness note:
|
|
24
|
-
* All helpers treat `null` as absence. Do not use these utilities with payloads
|
|
25
|
-
* where `A` can itself be `null`, or you will lose information. If you need to
|
|
26
|
-
* carry `null` as a valid payload, use `Option<A>` instead.
|
|
27
|
-
*
|
|
28
|
-
* @since 4.0.0
|
|
29
|
-
*/
|
|
30
|
-
import * as Combiner from "./Combiner.ts"
|
|
31
|
-
import type { LazyArg } from "./Function.ts"
|
|
32
|
-
import { dual } from "./Function.ts"
|
|
33
|
-
import * as Reducer from "./Reducer.ts"
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* @since 4.0.0
|
|
37
|
-
*/
|
|
38
|
-
export const map: {
|
|
39
|
-
/**
|
|
40
|
-
* @since 4.0.0
|
|
41
|
-
*/
|
|
42
|
-
<A, B>(f: (a: A) => B): (self: A | null) => B | null
|
|
43
|
-
/**
|
|
44
|
-
* @since 4.0.0
|
|
45
|
-
*/
|
|
46
|
-
<A, B>(self: A | null, f: (a: A) => B): B | null
|
|
47
|
-
} = dual(2, (self, f) => (self === null ? null : f(self)))
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* @since 4.0.0
|
|
51
|
-
*/
|
|
52
|
-
export const match: {
|
|
53
|
-
/**
|
|
54
|
-
* @since 4.0.0
|
|
55
|
-
*/
|
|
56
|
-
<B, A, C = B>(
|
|
57
|
-
options: {
|
|
58
|
-
readonly onNull: LazyArg<B>
|
|
59
|
-
readonly onNotNull: (a: A) => C
|
|
60
|
-
}
|
|
61
|
-
): (self: A | null) => B | C
|
|
62
|
-
/**
|
|
63
|
-
* @since 4.0.0
|
|
64
|
-
*/
|
|
65
|
-
<A, B, C = B>(
|
|
66
|
-
self: A | null,
|
|
67
|
-
options: {
|
|
68
|
-
readonly onNull: LazyArg<B>
|
|
69
|
-
readonly onNotNull: (a: A) => C
|
|
70
|
-
}
|
|
71
|
-
): B | C
|
|
72
|
-
} = dual(
|
|
73
|
-
2,
|
|
74
|
-
<A, B, C = B>(self: A | null, { onNotNull, onNull }: {
|
|
75
|
-
readonly onNull: LazyArg<B>
|
|
76
|
-
readonly onNotNull: (a: A) => C
|
|
77
|
-
}): B | C => self === null ? onNull() : onNotNull(self)
|
|
78
|
-
)
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* @since 4.0.0
|
|
82
|
-
*/
|
|
83
|
-
export const getOrThrowWith: {
|
|
84
|
-
/**
|
|
85
|
-
* @since 4.0.0
|
|
86
|
-
*/
|
|
87
|
-
(onNull: () => unknown): <A>(self: A | null) => A
|
|
88
|
-
/**
|
|
89
|
-
* @since 4.0.0
|
|
90
|
-
*/
|
|
91
|
-
<A>(self: A | null, onNull: () => unknown): A
|
|
92
|
-
} = dual(2, <A>(self: A | null, onNull: () => unknown): A => {
|
|
93
|
-
if (self !== null) {
|
|
94
|
-
return self
|
|
95
|
-
}
|
|
96
|
-
throw onNull()
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* @since 4.0.0
|
|
101
|
-
*/
|
|
102
|
-
export const getOrThrow: <A>(self: A | null) => A = getOrThrowWith(() => new Error("getOrThrow called on a null"))
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* @since 4.0.0
|
|
106
|
-
*/
|
|
107
|
-
export const liftThrowable = <A extends ReadonlyArray<unknown>, B>(
|
|
108
|
-
f: (...a: A) => B
|
|
109
|
-
): (...a: A) => B | null =>
|
|
110
|
-
(...a) => {
|
|
111
|
-
try {
|
|
112
|
-
return f(...a)
|
|
113
|
-
} catch {
|
|
114
|
-
return null
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Creates a `Reducer` for `NullOr<A>` that prioritizes the first non-`null`
|
|
120
|
-
* value and combines values when both operands are present.
|
|
121
|
-
*
|
|
122
|
-
* This `Reducer` is useful for scenarios where you want to:
|
|
123
|
-
* - Take the first available value (like a fallback chain)
|
|
124
|
-
* - Combine values when both are present
|
|
125
|
-
* - Maintain a `null` state only when all values are `null`
|
|
126
|
-
*
|
|
127
|
-
* The `initialValue` of the `Reducer` is `null`.
|
|
128
|
-
*
|
|
129
|
-
* **Behavior:**
|
|
130
|
-
* - `null` + `null` = `null`
|
|
131
|
-
* - `a` + `null` = `a` (first value wins)
|
|
132
|
-
* - `null` + `b` = `b` (second value wins)
|
|
133
|
-
* - `a` + `b` = `a + b` (values combined)
|
|
134
|
-
*
|
|
135
|
-
* @since 4.0.0
|
|
136
|
-
*/
|
|
137
|
-
export function makeReducer<A>(combiner: Combiner.Combiner<A>): Reducer.Reducer<A | null> {
|
|
138
|
-
return Reducer.make((self, that) => {
|
|
139
|
-
if (self === null) return that
|
|
140
|
-
if (that === null) return self
|
|
141
|
-
return combiner.combine(self, that)
|
|
142
|
-
}, null as A | null)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Creates a `Combiner` for `NullOr<A>` that only combines values when both
|
|
147
|
-
* operands are not `null`, failing fast if either is `null`.
|
|
148
|
-
*
|
|
149
|
-
* This `Combiner` is useful for scenarios where you need both values to be
|
|
150
|
-
* present to perform an operation, such as:
|
|
151
|
-
* - Mathematical operations that require two operands
|
|
152
|
-
* - Data validation that needs both fields
|
|
153
|
-
* - Operations that can't proceed with partial data
|
|
154
|
-
*
|
|
155
|
-
* **Behavior:**
|
|
156
|
-
* - `null` + `null` = `null`
|
|
157
|
-
* - `a` + `null` = `null` (fails fast)
|
|
158
|
-
* - `null` + `b` = `null` (fails fast)
|
|
159
|
-
* - `a` + `b` = `a + b` (values combined)
|
|
160
|
-
*
|
|
161
|
-
* @see {@link makeReducerFailFast} if you have a `Reducer` and want to lift it
|
|
162
|
-
* to `NullOr` values.
|
|
163
|
-
*
|
|
164
|
-
* @since 4.0.0
|
|
165
|
-
*/
|
|
166
|
-
export function makeCombinerFailFast<A>(combiner: Combiner.Combiner<A>): Combiner.Combiner<A | null> {
|
|
167
|
-
return Combiner.make((self, that) => {
|
|
168
|
-
if (self === null || that === null) return null
|
|
169
|
-
return combiner.combine(self, that)
|
|
170
|
-
})
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Creates a `Reducer` for `NullOr<A>` by wrapping an existing `Reducer` with
|
|
175
|
-
* fail-fast semantics for `NullOr` values.
|
|
176
|
-
*
|
|
177
|
-
* This function lifts a regular `Reducer` into the `NullOr` context, allowing
|
|
178
|
-
* you to use existing `Reducer`s with `NullOr` values while maintaining the
|
|
179
|
-
* fail-fast behavior where any `null` value causes the entire reduction to fail.
|
|
180
|
-
*
|
|
181
|
-
* The initial value is `some(reducer.initialValue)`, ensuring the `Reducer`
|
|
182
|
-
* starts with a valid `NullOr` value.
|
|
183
|
-
*
|
|
184
|
-
* **Behavior:**
|
|
185
|
-
* - Fails fast (returns `null`) if any operand is `null`
|
|
186
|
-
* - Uses the underlying reducer's combine logic when both values are present
|
|
187
|
-
*
|
|
188
|
-
* @see {@link makeCombinerFailFast} if you only have a `Combiner` and want to
|
|
189
|
-
* lift it to `NullOr` values.
|
|
190
|
-
*
|
|
191
|
-
* @since 4.0.0
|
|
192
|
-
*/
|
|
193
|
-
export function makeReducerFailFast<A>(reducer: Reducer.Reducer<A>): Reducer.Reducer<A | null> {
|
|
194
|
-
const combine = makeCombinerFailFast(reducer).combine
|
|
195
|
-
const initialValue = reducer.initialValue as A | null
|
|
196
|
-
return Reducer.make(combine, initialValue, (collection) => {
|
|
197
|
-
let out = initialValue
|
|
198
|
-
for (const value of collection) {
|
|
199
|
-
out = combine(out, value)
|
|
200
|
-
if (out === null) return out
|
|
201
|
-
}
|
|
202
|
-
return out
|
|
203
|
-
})
|
|
204
|
-
}
|