effect 4.0.0-beta.0 → 4.0.0-beta.10
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/Cache.d.ts +2 -2
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +1 -1
- 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.map +1 -1
- package/dist/Channel.js +6 -4
- package/dist/Channel.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 +3 -3
- package/dist/Config.js +3 -3
- 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 +175 -240
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +73 -119
- 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/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 -1
- package/dist/Filter.d.ts.map +1 -1
- package/dist/Filter.js +15 -0
- 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 +2 -2
- package/dist/Graph.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/LayerMap.d.ts +4 -4
- package/dist/LayerMap.d.ts.map +1 -1
- package/dist/LogLevel.d.ts +27 -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 +4 -4
- package/dist/Logger.d.ts.map +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/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/Random.d.ts +18 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +29 -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/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/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 +33 -14
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +65 -24
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +199 -49
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +386 -72
- package/dist/Schema.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/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 +37 -0
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +80 -0
- 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/Stream.d.ts +19 -19
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +12 -11
- 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/Types.d.ts +14 -6
- package/dist/Types.d.ts.map +1 -1
- package/dist/index.d.ts +499 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +499 -19
- 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 +37 -22
- package/dist/internal/effect.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/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 +6 -6
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/unstable/ai/AiError.d.ts +48 -48
- package/dist/unstable/ai/AiError.d.ts.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 +2 -2
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/McpSchema.d.ts +51 -51
- 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.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/cli/CliError.d.ts +5 -5
- package/dist/unstable/cli/Prompt.js +2 -2
- package/dist/unstable/cli/Prompt.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 +2 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/unstable/cluster/Entity.d.ts +5 -4
- 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 +1 -1
- 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 +8 -6
- 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.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.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/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 +11 -11
- 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.map +1 -1
- package/dist/unstable/http/HttpEffect.js +18 -26
- 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 +4 -9
- package/dist/unstable/http/HttpMiddleware.js.map +1 -1
- package/dist/unstable/http/HttpServerError.d.ts +6 -6
- package/dist/unstable/http/HttpServerResponse.js +1 -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/httpapi/HttpApiBuilder.js +5 -5
- package/dist/unstable/httpapi/HttpApiBuilder.js.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 +21 -39
- 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/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/OpenApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/OpenApi.js +18 -16
- 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/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 +2 -2
- package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.d.ts +6 -0
- package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
- package/dist/unstable/reactivity/Atom.d.ts +6 -6
- package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +15 -12
- package/dist/unstable/reactivity/Atom.js.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts +6 -6
- 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/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 +2 -2
- package/dist/unstable/rpc/Rpc.d.ts.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/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +5 -3
- 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 +4 -4
- package/dist/unstable/schema/Model.d.ts.map +1 -1
- package/dist/unstable/schema/VariantSchema.d.ts +2 -2
- package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
- package/dist/unstable/schema/VariantSchema.js +13 -2
- 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 +3 -2
- 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/SqlError.d.ts +2 -2
- package/dist/unstable/sql/SqlModel.d.ts +2 -2
- package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
- package/dist/unstable/sql/SqlSchema.d.ts +24 -1
- package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
- package/dist/unstable/sql/SqlSchema.js +24 -3
- 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 +2 -2
- package/dist/unstable/workflow/WorkflowEngine.d.ts +2 -1
- package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.js +2 -1
- package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +2 -2
- package/src/Cache.ts +3 -3
- package/src/Cause.ts +1 -1
- package/src/Channel.ts +6 -4
- package/src/Combiner.ts +280 -13
- package/src/Config.ts +3 -3
- package/src/Data.ts +538 -374
- package/src/DateTime.ts +24 -164
- package/src/Duration.ts +15 -15
- package/src/Effect.ts +202 -261
- package/src/Encoding.ts +879 -0
- package/src/Equal.ts +278 -111
- package/src/FileSystem.ts +7 -8
- package/src/Filter.ts +48 -1
- package/src/Formatter.ts +253 -51
- package/src/Graph.ts +8 -5
- package/src/JsonSchema.ts +383 -10
- package/src/Latch.ts +112 -0
- package/src/LayerMap.ts +5 -5
- package/src/LogLevel.ts +31 -0
- package/src/Logger.ts +5 -5
- package/src/Metric.ts +4 -4
- package/src/Optic.ts +948 -19
- 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/Random.ts +33 -14
- package/src/RcMap.ts +5 -5
- package/src/RcRef.ts +1 -1
- package/src/Reducer.ts +166 -7
- package/src/Request.ts +3 -2
- package/src/RequestResolver.ts +9 -29
- package/src/Result.ts +13 -0
- package/src/Schedule.ts +279 -140
- package/src/Schema.ts +575 -113
- package/src/SchemaGetter.ts +12 -14
- package/src/SchemaRepresentation.ts +43 -24
- package/src/SchemaTransformation.ts +104 -0
- package/src/ScopedCache.ts +3 -3
- package/src/Semaphore.ts +356 -0
- package/src/Stream.ts +43 -42
- package/src/Struct.ts +26 -0
- package/src/SubscriptionRef.ts +3 -2
- package/src/SynchronizedRef.ts +3 -2
- package/src/Types.ts +12 -2
- package/src/index.ts +502 -20
- package/src/internal/core.ts +12 -5
- package/src/internal/dateTime.ts +9 -30
- package/src/internal/effect.ts +70 -37
- package/src/internal/random.ts +20 -0
- package/src/internal/rcRef.ts +4 -3
- package/src/testing/TestClock.ts +13 -11
- package/src/testing/TestSchema.ts +8 -8
- package/src/unstable/ai/AiError.ts +2 -2
- package/src/unstable/ai/Chat.ts +12 -11
- package/src/unstable/ai/LanguageModel.ts +3 -3
- package/src/unstable/ai/McpServer.ts +2 -2
- package/src/unstable/ai/Prompt.ts +37 -37
- package/src/unstable/ai/Response.ts +25 -25
- package/src/unstable/cli/Prompt.ts +2 -2
- package/src/unstable/cluster/ClusterCron.ts +2 -2
- package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -2
- package/src/unstable/cluster/Entity.ts +7 -6
- package/src/unstable/cluster/EntityResource.ts +4 -4
- package/src/unstable/cluster/Envelope.ts +1 -1
- package/src/unstable/cluster/K8sHttpClient.ts +1 -1
- package/src/unstable/cluster/MessageStorage.ts +3 -5
- package/src/unstable/cluster/Runners.ts +6 -5
- package/src/unstable/cluster/Sharding.ts +11 -9
- package/src/unstable/cluster/ShardingConfig.ts +10 -11
- 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 +2 -4
- package/src/unstable/eventlog/EventLog.ts +2 -1
- package/src/unstable/http/Cookies.ts +3 -3
- package/src/unstable/http/HttpBody.ts +42 -1
- package/src/unstable/http/HttpClient.ts +19 -19
- package/src/unstable/http/HttpClientRequest.ts +38 -13
- package/src/unstable/http/HttpEffect.ts +17 -25
- package/src/unstable/http/HttpMethod.ts +16 -4
- package/src/unstable/http/HttpMiddleware.ts +5 -10
- package/src/unstable/http/HttpServerResponse.ts +1 -1
- package/src/unstable/http/Multipart.ts +2 -2
- package/src/unstable/http/UrlParams.ts +20 -5
- package/src/unstable/httpapi/HttpApiBuilder.ts +5 -5
- package/src/unstable/httpapi/HttpApiClient.ts +3 -3
- package/src/unstable/httpapi/HttpApiEndpoint.ts +47 -72
- package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
- package/src/unstable/httpapi/OpenApi.ts +18 -16
- package/src/unstable/observability/Otlp.ts +12 -12
- package/src/unstable/observability/OtlpExporter.ts +3 -3
- package/src/unstable/observability/OtlpLogger.ts +4 -4
- 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 +2 -2
- package/src/unstable/process/ChildProcessSpawner.ts +6 -0
- package/src/unstable/reactivity/Atom.ts +20 -18
- package/src/unstable/reactivity/AtomHttpApi.ts +19 -18
- 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 +3 -3
- package/src/unstable/rpc/RpcClient.ts +12 -54
- package/src/unstable/rpc/RpcServer.ts +6 -4
- package/src/unstable/rpc/Utils.ts +2 -1
- package/src/unstable/schema/VariantSchema.ts +36 -7
- package/src/unstable/socket/Socket.ts +7 -6
- package/src/unstable/sql/SqlModel.ts +2 -2
- package/src/unstable/sql/SqlSchema.ts +62 -13
- 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/WorkflowEngine.ts +3 -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/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/Equal.ts
CHANGED
|
@@ -1,7 +1,71 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Structural and custom equality for Effect values.
|
|
3
|
+
*
|
|
4
|
+
* The `Equal` module provides deep structural comparison for primitives, plain
|
|
5
|
+
* objects, arrays, Maps, Sets, Dates, and RegExps. Types that implement the
|
|
6
|
+
* {@link Equal} interface can supply their own comparison logic while staying
|
|
7
|
+
* compatible with the rest of the ecosystem (HashMap, HashSet, etc.).
|
|
8
|
+
*
|
|
9
|
+
* ## Mental model
|
|
10
|
+
*
|
|
11
|
+
* - **Structural equality** — two values are equal when their contents match,
|
|
12
|
+
* not when they share the same reference.
|
|
13
|
+
* - **Hash-first shortcut** — before comparing fields, the module checks
|
|
14
|
+
* {@link Hash.hash}. If the hashes differ the objects are unequal without
|
|
15
|
+
* further traversal.
|
|
16
|
+
* - **Equal interface** — any object that implements both {@link symbol} (the
|
|
17
|
+
* equality method) and `Hash.symbol` (the hash method) can define custom
|
|
18
|
+
* comparison logic.
|
|
19
|
+
* - **Caching** — comparison results for object pairs are cached in a WeakMap.
|
|
20
|
+
* This makes repeated checks fast but **requires immutability** after the
|
|
21
|
+
* first comparison.
|
|
22
|
+
* - **By-reference opt-out** — {@link byReference} and {@link byReferenceUnsafe}
|
|
23
|
+
* let you switch individual objects back to reference equality when you need
|
|
24
|
+
* mutable identity semantics.
|
|
25
|
+
*
|
|
26
|
+
* ## Common tasks
|
|
27
|
+
*
|
|
28
|
+
* - Compare two values → {@link equals}
|
|
29
|
+
* - Check if a value implements `Equal` → {@link isEqual}
|
|
30
|
+
* - Use `equals` where an `Equivalence` is expected → {@link asEquivalence}
|
|
31
|
+
* - Implement custom equality on a class → implement {@link Equal} (see
|
|
32
|
+
* example on the interface)
|
|
33
|
+
* - Opt an object out of structural equality → {@link byReference} /
|
|
34
|
+
* {@link byReferenceUnsafe}
|
|
35
|
+
*
|
|
36
|
+
* ## Gotchas
|
|
37
|
+
*
|
|
38
|
+
* - Objects **must be treated as immutable** after their first equality check.
|
|
39
|
+
* Results are cached; mutating an object afterwards yields stale results.
|
|
40
|
+
* - `NaN` is considered equal to `NaN` (unlike `===`).
|
|
41
|
+
* - Functions without an `Equal` implementation are compared by reference.
|
|
42
|
+
* - Map and Set comparisons are order-independent but O(n²) in size.
|
|
43
|
+
* - If only one of two objects implements `Equal`, they are never equal.
|
|
44
|
+
*
|
|
45
|
+
* ## Quickstart
|
|
46
|
+
*
|
|
47
|
+
* **Example** (basic structural comparison)
|
|
48
|
+
*
|
|
49
|
+
* ```ts
|
|
50
|
+
* import { Equal } from "effect"
|
|
51
|
+
*
|
|
52
|
+
* // Primitives
|
|
53
|
+
* console.log(Equal.equals(1, 1)) // true
|
|
54
|
+
* console.log(Equal.equals("a", "b")) // false
|
|
55
|
+
*
|
|
56
|
+
* // Objects and arrays
|
|
57
|
+
* console.log(Equal.equals({ x: 1 }, { x: 1 })) // true
|
|
58
|
+
* console.log(Equal.equals([1, 2], [1, 2])) // true
|
|
59
|
+
*
|
|
60
|
+
* // Curried form
|
|
61
|
+
* const is42 = Equal.equals(42)
|
|
62
|
+
* console.log(is42(42)) // true
|
|
63
|
+
* console.log(is42(0)) // false
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* @see {@link equals} — the main comparison function
|
|
67
|
+
* @see {@link Equal} — the interface for custom equality
|
|
68
|
+
* @see {@link Hash} — the companion hashing module
|
|
5
69
|
*
|
|
6
70
|
* @since 2.0.0
|
|
7
71
|
*/
|
|
@@ -11,17 +75,67 @@ import { byReferenceInstances, getAllObjectKeys } from "./internal/equal.ts"
|
|
|
11
75
|
import { hasProperty } from "./Predicate.ts"
|
|
12
76
|
|
|
13
77
|
/**
|
|
14
|
-
* The unique identifier
|
|
78
|
+
* The unique string identifier for the {@link Equal} interface.
|
|
79
|
+
*
|
|
80
|
+
* Use this as a computed property key when implementing custom equality on a
|
|
81
|
+
* class or object literal.
|
|
82
|
+
*
|
|
83
|
+
* When to use:
|
|
84
|
+
* - As the method name when implementing the {@link Equal} interface.
|
|
85
|
+
* - To check manually whether an object carries an equality method (prefer
|
|
86
|
+
* {@link isEqual} instead).
|
|
87
|
+
*
|
|
88
|
+
* Behavior:
|
|
89
|
+
* - Pure constant — no allocation or side effects.
|
|
90
|
+
*
|
|
91
|
+
* **Example** (implementing Equal on a class)
|
|
92
|
+
*
|
|
93
|
+
* ```ts
|
|
94
|
+
* import { Equal, Hash } from "effect"
|
|
95
|
+
*
|
|
96
|
+
* class UserId implements Equal.Equal {
|
|
97
|
+
* constructor(readonly id: string) {}
|
|
98
|
+
*
|
|
99
|
+
* [Equal.symbol](that: Equal.Equal): boolean {
|
|
100
|
+
* return that instanceof UserId && this.id === that.id
|
|
101
|
+
* }
|
|
102
|
+
*
|
|
103
|
+
* [Hash.symbol](): number {
|
|
104
|
+
* return Hash.string(this.id)
|
|
105
|
+
* }
|
|
106
|
+
* }
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* @see {@link Equal} — the interface that uses this symbol
|
|
110
|
+
* @see {@link isEqual} — type guard for `Equal` implementors
|
|
15
111
|
*
|
|
16
112
|
* @since 2.0.0
|
|
17
113
|
*/
|
|
18
114
|
export const symbol = "~effect/interfaces/Equal"
|
|
19
115
|
|
|
20
116
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
117
|
+
* The interface for types that define their own equality logic.
|
|
118
|
+
*
|
|
119
|
+
* Any object that implements both `[Equal.symbol]` (equality) and
|
|
120
|
+
* `[Hash.symbol]` (hashing) is recognized by {@link equals} and by
|
|
121
|
+
* hash-based collections such as `HashMap` and `HashSet`.
|
|
122
|
+
*
|
|
123
|
+
* When to use:
|
|
124
|
+
* - When you need value-based equality for a class (e.g. domain IDs,
|
|
125
|
+
* coordinates, money values).
|
|
126
|
+
* - When your type will be stored in `HashMap` or `HashSet`.
|
|
127
|
+
* - When the default structural comparison is too broad or too narrow for
|
|
128
|
+
* your type.
|
|
129
|
+
*
|
|
130
|
+
* Behavior:
|
|
131
|
+
* - Extends `Hash.Hash`, so implementors **must** also provide `[Hash.symbol]`.
|
|
132
|
+
* - The hash contract: if `a[Equal.symbol](b)` returns `true`, then
|
|
133
|
+
* `Hash.hash(a)` must equal `Hash.hash(b)`.
|
|
134
|
+
* - {@link equals} delegates to this method when both operands implement it.
|
|
135
|
+
* If only one operand implements `Equal`, they are considered unequal.
|
|
136
|
+
*
|
|
137
|
+
* **Example** (coordinate with value equality)
|
|
23
138
|
*
|
|
24
|
-
* @example
|
|
25
139
|
* ```ts
|
|
26
140
|
* import { Equal, Hash } from "effect"
|
|
27
141
|
*
|
|
@@ -38,8 +152,15 @@ export const symbol = "~effect/interfaces/Equal"
|
|
|
38
152
|
* return Hash.string(`${this.x},${this.y}`)
|
|
39
153
|
* }
|
|
40
154
|
* }
|
|
155
|
+
*
|
|
156
|
+
* console.log(Equal.equals(new Coordinate(1, 2), new Coordinate(1, 2))) // true
|
|
157
|
+
* console.log(Equal.equals(new Coordinate(1, 2), new Coordinate(3, 4))) // false
|
|
41
158
|
* ```
|
|
42
159
|
*
|
|
160
|
+
* @see {@link symbol} — the property key used by the equality method
|
|
161
|
+
* @see {@link equals} — the main comparison function
|
|
162
|
+
* @see {@link isEqual} — type guard for `Equal` implementors
|
|
163
|
+
*
|
|
43
164
|
* @category models
|
|
44
165
|
* @since 2.0.0
|
|
45
166
|
*/
|
|
@@ -48,65 +169,67 @@ export interface Equal extends Hash.Hash {
|
|
|
48
169
|
}
|
|
49
170
|
|
|
50
171
|
/**
|
|
51
|
-
* Compares two values for structural equality.
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* -
|
|
55
|
-
* -
|
|
56
|
-
*
|
|
57
|
-
* -
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* -
|
|
61
|
-
* -
|
|
62
|
-
* -
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
172
|
+
* Compares two values for deep structural equality.
|
|
173
|
+
*
|
|
174
|
+
* When to use:
|
|
175
|
+
* - As the default equality check throughout Effect code.
|
|
176
|
+
* - In data-level assertions or conditional logic where structural comparison
|
|
177
|
+
* is needed.
|
|
178
|
+
* - In its curried (single-argument) form to build reusable predicates.
|
|
179
|
+
*
|
|
180
|
+
* Behavior:
|
|
181
|
+
* - Returns a `boolean`; never throws.
|
|
182
|
+
* - Primitives: compared by value. `NaN` equals `NaN`.
|
|
183
|
+
* - Objects implementing {@link Equal}: delegates to their
|
|
184
|
+
* `[Equal.symbol]` method. If only one operand implements `Equal`, the
|
|
185
|
+
* result is `false`.
|
|
186
|
+
* - Dates: compared by ISO string representation.
|
|
187
|
+
* - RegExps: compared by string representation.
|
|
188
|
+
* - Arrays: element-by-element recursive comparison (order matters).
|
|
189
|
+
* - Maps / Sets: structural comparison of entries (order-independent, O(n²)).
|
|
190
|
+
* - Plain objects: all own and inherited enumerable keys are compared
|
|
191
|
+
* recursively.
|
|
192
|
+
* - Functions without an `Equal` implementation are compared by reference.
|
|
193
|
+
* - Circular references are handled; two structures that are circular at the
|
|
194
|
+
* same depth are considered equal.
|
|
195
|
+
* - Hash values are checked first as a fast-path rejection.
|
|
196
|
+
* - Results are cached per object pair in a WeakMap. **Objects must not be
|
|
197
|
+
* mutated after their first comparison.**
|
|
198
|
+
* - Supports dual (data-last) usage: call with one argument to get a curried
|
|
199
|
+
* predicate.
|
|
200
|
+
*
|
|
201
|
+
* **Example** (comparing values)
|
|
202
|
+
*
|
|
78
203
|
* ```ts
|
|
79
204
|
* import { Equal } from "effect"
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* //
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* // Objects
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* //
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* const
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* assert(Equal.equals(map1, map2) === true)
|
|
103
|
-
*
|
|
104
|
-
* // Curried version
|
|
105
|
-
* const isEqualTo5 = Equal.equals(5)
|
|
106
|
-
* assert(isEqualTo5(5) === true)
|
|
107
|
-
* assert(isEqualTo5(3) === false)
|
|
205
|
+
*
|
|
206
|
+
* // Primitives
|
|
207
|
+
* console.log(Equal.equals(1, 1)) // true
|
|
208
|
+
* console.log(Equal.equals(NaN, NaN)) // true
|
|
209
|
+
* console.log(Equal.equals("a", "b")) // false
|
|
210
|
+
*
|
|
211
|
+
* // Objects and arrays
|
|
212
|
+
* console.log(Equal.equals({ a: 1, b: 2 }, { a: 1, b: 2 })) // true
|
|
213
|
+
* console.log(Equal.equals([1, [2, 3]], [1, [2, 3]])) // true
|
|
214
|
+
*
|
|
215
|
+
* // Dates
|
|
216
|
+
* console.log(Equal.equals(new Date("2024-01-01"), new Date("2024-01-01"))) // true
|
|
217
|
+
*
|
|
218
|
+
* // Maps (order-independent)
|
|
219
|
+
* const m1 = new Map([["a", 1], ["b", 2]])
|
|
220
|
+
* const m2 = new Map([["b", 2], ["a", 1]])
|
|
221
|
+
* console.log(Equal.equals(m1, m2)) // true
|
|
222
|
+
*
|
|
223
|
+
* // Curried form
|
|
224
|
+
* const is5 = Equal.equals(5)
|
|
225
|
+
* console.log(is5(5)) // true
|
|
226
|
+
* console.log(is5(3)) // false
|
|
108
227
|
* ```
|
|
109
228
|
*
|
|
229
|
+
* @see {@link Equal} — the interface for custom equality
|
|
230
|
+
* @see {@link isEqual} — check whether a value implements `Equal`
|
|
231
|
+
* @see {@link asEquivalence} — wrap `equals` as an `Equivalence`
|
|
232
|
+
*
|
|
110
233
|
* @category equality
|
|
111
234
|
* @since 2.0.0
|
|
112
235
|
*/
|
|
@@ -269,7 +392,7 @@ function compareRecords(
|
|
|
269
392
|
|
|
270
393
|
/** @internal */
|
|
271
394
|
export function makeCompareMap<K, V>(keyEquivalence: Equivalence<K>, valueEquivalence: Equivalence<V>) {
|
|
272
|
-
return function compareMaps(self:
|
|
395
|
+
return function compareMaps(self: Iterable<[K, V]>, that: Iterable<[K, V]>): boolean {
|
|
273
396
|
for (const [selfKey, selfValue] of self) {
|
|
274
397
|
let found = false
|
|
275
398
|
for (const [thatKey, thatValue] of that) {
|
|
@@ -291,7 +414,7 @@ const compareMaps = makeCompareMap(compareBoth, compareBoth)
|
|
|
291
414
|
|
|
292
415
|
/** @internal */
|
|
293
416
|
export function makeCompareSet<A>(equivalence: Equivalence<A>) {
|
|
294
|
-
return function compareSets(self:
|
|
417
|
+
return function compareSets(self: Iterable<A>, that: Iterable<A>): boolean {
|
|
295
418
|
for (const selfValue of self) {
|
|
296
419
|
let found = false
|
|
297
420
|
for (const thatValue of that) {
|
|
@@ -312,38 +435,62 @@ export function makeCompareSet<A>(equivalence: Equivalence<A>) {
|
|
|
312
435
|
const compareSets = makeCompareSet(compareBoth)
|
|
313
436
|
|
|
314
437
|
/**
|
|
315
|
-
*
|
|
438
|
+
* Checks whether a value implements the {@link Equal} interface.
|
|
439
|
+
*
|
|
440
|
+
* When to use:
|
|
441
|
+
* - To branch on whether a value supports custom equality before calling
|
|
442
|
+
* its `[Equal.symbol]` method directly.
|
|
443
|
+
* - In generic utility code that needs to distinguish `Equal` implementors
|
|
444
|
+
* from plain values.
|
|
445
|
+
*
|
|
446
|
+
* Behavior:
|
|
447
|
+
* - Pure function, no side effects.
|
|
448
|
+
* - Returns `true` if and only if `u` has a property keyed by
|
|
449
|
+
* {@link symbol}.
|
|
450
|
+
* - Acts as a TypeScript type guard, narrowing the input to {@link Equal}.
|
|
451
|
+
*
|
|
452
|
+
* **Example** (type guard)
|
|
316
453
|
*
|
|
317
|
-
* @example
|
|
318
454
|
* ```ts
|
|
319
455
|
* import { Equal, Hash } from "effect"
|
|
320
|
-
* import * as assert from "node:assert"
|
|
321
456
|
*
|
|
322
|
-
* class
|
|
457
|
+
* class Token implements Equal.Equal {
|
|
458
|
+
* constructor(readonly value: string) {}
|
|
323
459
|
* [Equal.symbol](that: Equal.Equal): boolean {
|
|
324
|
-
* return that instanceof
|
|
460
|
+
* return that instanceof Token && this.value === that.value
|
|
325
461
|
* }
|
|
326
462
|
* [Hash.symbol](): number {
|
|
327
|
-
* return
|
|
463
|
+
* return Hash.string(this.value)
|
|
328
464
|
* }
|
|
329
465
|
* }
|
|
330
466
|
*
|
|
331
|
-
*
|
|
332
|
-
*
|
|
333
|
-
*
|
|
334
|
-
* assert(Equal.isEqual(42) === false)
|
|
467
|
+
* console.log(Equal.isEqual(new Token("abc"))) // true
|
|
468
|
+
* console.log(Equal.isEqual({ x: 1 })) // false
|
|
469
|
+
* console.log(Equal.isEqual(42)) // false
|
|
335
470
|
* ```
|
|
336
471
|
*
|
|
472
|
+
* @see {@link Equal} — the interface being checked
|
|
473
|
+
* @see {@link symbol} — the property key that signals `Equal` support
|
|
474
|
+
*
|
|
337
475
|
* @category guards
|
|
338
476
|
* @since 2.0.0
|
|
339
477
|
*/
|
|
340
478
|
export const isEqual = (u: unknown): u is Equal => hasProperty(u, symbol)
|
|
341
479
|
|
|
342
480
|
/**
|
|
343
|
-
*
|
|
344
|
-
*
|
|
481
|
+
* Wraps {@link equals} as an `Equivalence<A>`.
|
|
482
|
+
*
|
|
483
|
+
* When to use:
|
|
484
|
+
* - When an API (e.g. `Array.dedupeWith`, `Equivalence.mapInput`) requires an
|
|
485
|
+
* `Equivalence` and you want to reuse `Equal.equals`.
|
|
486
|
+
*
|
|
487
|
+
* Behavior:
|
|
488
|
+
* - Returns a function `(a: A, b: A) => boolean` that delegates to
|
|
489
|
+
* {@link equals}.
|
|
490
|
+
* - Pure; allocates a thin wrapper on each call.
|
|
491
|
+
*
|
|
492
|
+
* **Example** (deduplicating with Equal semantics)
|
|
345
493
|
*
|
|
346
|
-
* @example
|
|
347
494
|
* ```ts
|
|
348
495
|
* import { Array, Equal } from "effect"
|
|
349
496
|
*
|
|
@@ -352,72 +499,92 @@ export const isEqual = (u: unknown): u is Equal => hasProperty(u, symbol)
|
|
|
352
499
|
* console.log(result) // [1, 2, 3]
|
|
353
500
|
* ```
|
|
354
501
|
*
|
|
502
|
+
* @see {@link equals} — the underlying comparison function
|
|
503
|
+
*
|
|
355
504
|
* @category instances
|
|
356
505
|
* @since 2.0.0
|
|
357
506
|
*/
|
|
358
507
|
export const asEquivalence: <A>() => Equivalence<A> = () => equals
|
|
359
508
|
|
|
360
509
|
/**
|
|
361
|
-
* Creates a proxy
|
|
510
|
+
* Creates a proxy that uses reference equality instead of structural equality.
|
|
362
511
|
*
|
|
363
|
-
*
|
|
364
|
-
*
|
|
365
|
-
*
|
|
512
|
+
* When to use:
|
|
513
|
+
* - When you have a plain object or array that should be compared by identity
|
|
514
|
+
* (reference), not by contents.
|
|
515
|
+
* - When you want to preserve the original object unchanged and get a new
|
|
516
|
+
* reference-equal handle.
|
|
366
517
|
*
|
|
367
|
-
*
|
|
368
|
-
*
|
|
369
|
-
*
|
|
370
|
-
*
|
|
518
|
+
* Behavior:
|
|
519
|
+
* - Returns a `Proxy` wrapping `obj`. The proxy reads through to the
|
|
520
|
+
* original, so property access is unchanged.
|
|
521
|
+
* - The proxy is registered in an internal WeakSet; {@link equals} returns
|
|
522
|
+
* `false` for any pair where at least one operand is in that set (unless
|
|
523
|
+
* they are the same reference).
|
|
524
|
+
* - Each call creates a **new** proxy, so `byReference(x) !== byReference(x)`.
|
|
525
|
+
* - Does **not** mutate the original object (unlike {@link byReferenceUnsafe}).
|
|
371
526
|
*
|
|
372
|
-
*
|
|
373
|
-
* const obj2 = { a: 1, b: 2 }
|
|
527
|
+
* **Example** (opting out of structural equality)
|
|
374
528
|
*
|
|
375
|
-
*
|
|
376
|
-
*
|
|
529
|
+
* ```ts
|
|
530
|
+
* import { Equal } from "effect"
|
|
377
531
|
*
|
|
378
|
-
*
|
|
379
|
-
* const
|
|
380
|
-
* assert(Equal.equals(obj1ByRef, obj2) === false) // uses reference equality
|
|
381
|
-
* assert(Equal.equals(obj1ByRef, obj1ByRef) === true) // same reference
|
|
532
|
+
* const a = { x: 1 }
|
|
533
|
+
* const b = { x: 1 }
|
|
382
534
|
*
|
|
383
|
-
*
|
|
384
|
-
* const obj1ByRef2 = Equal.byReference(obj1)
|
|
385
|
-
* assert(Equal.equals(obj1ByRef, obj1ByRef2) === false) // different instances
|
|
535
|
+
* console.log(Equal.equals(a, b)) // true (structural)
|
|
386
536
|
*
|
|
387
|
-
*
|
|
388
|
-
*
|
|
537
|
+
* const aRef = Equal.byReference(a)
|
|
538
|
+
* console.log(Equal.equals(aRef, b)) // false (reference)
|
|
539
|
+
* console.log(Equal.equals(aRef, aRef)) // true (same reference)
|
|
540
|
+
* console.log(aRef.x) // 1 (proxy reads through)
|
|
389
541
|
* ```
|
|
390
542
|
*
|
|
543
|
+
* @see {@link byReferenceUnsafe} — same effect without a proxy (mutates the
|
|
544
|
+
* original)
|
|
545
|
+
* @see {@link equals} — the comparison function affected by this opt-out
|
|
546
|
+
*
|
|
391
547
|
* @category utility
|
|
392
548
|
* @since 2.0.0
|
|
393
549
|
*/
|
|
394
550
|
export const byReference = <T extends object>(obj: T): T => byReferenceUnsafe(new Proxy(obj, {}))
|
|
395
551
|
|
|
396
552
|
/**
|
|
397
|
-
*
|
|
553
|
+
* Permanently marks an object to use reference equality, without creating a
|
|
554
|
+
* proxy.
|
|
398
555
|
*
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
*
|
|
556
|
+
* When to use:
|
|
557
|
+
* - When you want reference equality semantics and can accept that the
|
|
558
|
+
* original object is **permanently** modified.
|
|
559
|
+
* - When proxy overhead is unacceptable (hot paths, large collections).
|
|
560
|
+
*
|
|
561
|
+
* Behavior:
|
|
562
|
+
* - Adds `obj` to an internal WeakSet. From that point on, {@link equals}
|
|
563
|
+
* treats it as reference-only.
|
|
564
|
+
* - Returns the **same** object (not a copy or proxy), so
|
|
565
|
+
* `byReferenceUnsafe(x) === x`.
|
|
566
|
+
* - The marking is irreversible for the lifetime of the object.
|
|
567
|
+
* - Does **not** affect the object's prototype, properties, or behavior
|
|
568
|
+
* beyond equality checks.
|
|
569
|
+
*
|
|
570
|
+
* **Example** (marking an object for reference equality)
|
|
402
571
|
*
|
|
403
|
-
* @example
|
|
404
572
|
* ```ts
|
|
405
573
|
* import { Equal } from "effect"
|
|
406
|
-
* import * as assert from "node:assert"
|
|
407
574
|
*
|
|
408
575
|
* const obj1 = { a: 1, b: 2 }
|
|
409
576
|
* const obj2 = { a: 1, b: 2 }
|
|
410
577
|
*
|
|
411
|
-
*
|
|
412
|
-
* const obj1ByRef = Equal.byReferenceUnsafe(obj1)
|
|
413
|
-
* assert(obj1ByRef === obj1) // Same object, no proxy created
|
|
414
|
-
* assert(Equal.equals(obj1ByRef, obj2) === false) // uses reference equality
|
|
415
|
-
* assert(Equal.equals(obj1ByRef, obj1ByRef) === true) // same reference
|
|
578
|
+
* Equal.byReferenceUnsafe(obj1)
|
|
416
579
|
*
|
|
417
|
-
*
|
|
418
|
-
*
|
|
580
|
+
* console.log(Equal.equals(obj1, obj2)) // false (reference)
|
|
581
|
+
* console.log(Equal.equals(obj1, obj1)) // true (same reference)
|
|
582
|
+
* console.log(obj1 === Equal.byReferenceUnsafe(obj1)) // true (same object)
|
|
419
583
|
* ```
|
|
420
584
|
*
|
|
585
|
+
* @see {@link byReference} — safer alternative that creates a proxy
|
|
586
|
+
* @see {@link equals} — the comparison function affected by this opt-out
|
|
587
|
+
*
|
|
421
588
|
* @category utility
|
|
422
589
|
* @since 2.0.0
|
|
423
590
|
*/
|
package/src/FileSystem.ts
CHANGED
|
@@ -733,8 +733,7 @@ export const make = (
|
|
|
733
733
|
Effect.as(true),
|
|
734
734
|
Effect.catchTag(
|
|
735
735
|
"PlatformError",
|
|
736
|
-
(e) =>
|
|
737
|
-
e.reason._tag === "SystemError" && e.reason.kind === "NotFound" ? Effect.succeed(false) : Effect.fail(e)
|
|
736
|
+
(e) => e.reason._tag === "NotFound" ? Effect.succeed(false) : Effect.fail(e)
|
|
738
737
|
)
|
|
739
738
|
),
|
|
740
739
|
readFileString: (path, encoding) =>
|
|
@@ -757,16 +756,16 @@ export const make = (
|
|
|
757
756
|
const bytesToRead = options?.bytesToRead !== undefined ? Size(options.bytesToRead) : undefined
|
|
758
757
|
let totalBytesRead = BigInt(0)
|
|
759
758
|
const chunkSize = Size(options?.chunkSize ?? 64 * 1024)
|
|
759
|
+
const readChunk = file.readAlloc(chunkSize)
|
|
760
760
|
return Stream.fromPull(Effect.succeed(
|
|
761
761
|
Effect.flatMap(
|
|
762
762
|
Effect.suspend((): Pull.Pull<Uint8Array | undefined, PlatformError> => {
|
|
763
763
|
if (bytesToRead !== undefined && bytesToRead <= totalBytesRead) {
|
|
764
764
|
return Cause.done()
|
|
765
765
|
}
|
|
766
|
-
|
|
767
|
-
? bytesToRead - totalBytesRead
|
|
768
|
-
:
|
|
769
|
-
return file.readAlloc(toRead)
|
|
766
|
+
return bytesToRead !== undefined && (bytesToRead - totalBytesRead) < chunkSize
|
|
767
|
+
? file.readAlloc(bytesToRead - totalBytesRead)
|
|
768
|
+
: readChunk
|
|
770
769
|
}),
|
|
771
770
|
(buf) => {
|
|
772
771
|
if (!buf) return Cause.done()
|
|
@@ -802,7 +801,7 @@ const notFound = (method: string, path: string) =>
|
|
|
802
801
|
systemError({
|
|
803
802
|
module: "FileSystem",
|
|
804
803
|
method,
|
|
805
|
-
|
|
804
|
+
_tag: "NotFound",
|
|
806
805
|
description: "No such file or directory",
|
|
807
806
|
pathOrDescriptor: path
|
|
808
807
|
})
|
|
@@ -829,9 +828,9 @@ const notFound = (method: string, path: string) =>
|
|
|
829
828
|
* }
|
|
830
829
|
* return Effect.fail(
|
|
831
830
|
* PlatformError.systemError({
|
|
831
|
+
* _tag: "NotFound",
|
|
832
832
|
* module: "FileSystem",
|
|
833
833
|
* method: "readFileString",
|
|
834
|
-
* kind: "NotFound",
|
|
835
834
|
* description: "File not found",
|
|
836
835
|
* pathOrDescriptor: path
|
|
837
836
|
* })
|
package/src/Filter.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { dual } from "./Function.ts"
|
|
|
7
7
|
import * as Option from "./Option.ts"
|
|
8
8
|
import * as Predicate from "./Predicate.ts"
|
|
9
9
|
import * as Result from "./Result.ts"
|
|
10
|
-
import type { EqualsWith, ExcludeTag, ExtractTag, Tags } from "./Types.ts"
|
|
10
|
+
import type { EqualsWith, ExcludeTag, ExtractReason, ExtractTag, ReasonTags, Tags } from "./Types.ts"
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Represents a filter function that can transform inputs to outputs or filter them out.
|
|
@@ -456,6 +456,53 @@ const taggedImpl =
|
|
|
456
456
|
<Input>(input: Input): Result.Result<ExtractTag<Input, Tag>, ExcludeTag<Input, Tag>> =>
|
|
457
457
|
Predicate.isTagged(input, tag) ? Result.succeed(input as any) : Result.fail(input as ExcludeTag<Input, Tag>)
|
|
458
458
|
|
|
459
|
+
/**
|
|
460
|
+
* Creates a filter that extracts a reason from a tagged error.
|
|
461
|
+
*
|
|
462
|
+
* @since 4.0.0
|
|
463
|
+
* @category Constructors
|
|
464
|
+
*/
|
|
465
|
+
export const reason: {
|
|
466
|
+
/**
|
|
467
|
+
* Creates a filter that extracts a reason from a tagged error.
|
|
468
|
+
*
|
|
469
|
+
* @since 4.0.0
|
|
470
|
+
* @category Constructors
|
|
471
|
+
*/
|
|
472
|
+
<Input>(): <const Tag extends Tags<Input>, const ReasonTag extends ReasonTags<ExtractTag<Input, Tag>>>(
|
|
473
|
+
tag: Tag,
|
|
474
|
+
reasonTag: ReasonTag
|
|
475
|
+
) => Filter<Input, ExtractReason<ExtractTag<Input, Tag>, ReasonTag>, Input>
|
|
476
|
+
/**
|
|
477
|
+
* Creates a filter that extracts a reason from a tagged error.
|
|
478
|
+
*
|
|
479
|
+
* @since 4.0.0
|
|
480
|
+
* @category Constructors
|
|
481
|
+
*/
|
|
482
|
+
<Input, const Tag extends Tags<Input>, const ReasonTag extends ReasonTags<ExtractTag<Input, Tag>>>(tag: Tag, reasonTag: ReasonTag): Filter<Input, ExtractReason<ExtractTag<Input, Tag>, ReasonTag>, Input>
|
|
483
|
+
/**
|
|
484
|
+
* Creates a filter that extracts a reason from a tagged error.
|
|
485
|
+
*
|
|
486
|
+
* @since 4.0.0
|
|
487
|
+
* @category Constructors
|
|
488
|
+
*/
|
|
489
|
+
<const Tag extends string, const ReasonTag extends string>(tag: Tag, reasonTag: ReasonTag): <Input>(input: Input) => Result.Result<ExtractReason<ExtractTag<Input, Tag>, ReasonTag>, Input>
|
|
490
|
+
} = function() {
|
|
491
|
+
return arguments.length === 0 ? reasonImpl : reasonImpl(arguments[0] as any, arguments[1] as any)
|
|
492
|
+
} as any
|
|
493
|
+
|
|
494
|
+
const reasonImpl =
|
|
495
|
+
<const Tag extends string, const ReasonTag extends string>(tag: Tag, reasonTag: ReasonTag) =>
|
|
496
|
+
<Input>(input: Input): Result.Result<ExtractTag<Input, Tag>, ExcludeTag<Input, Tag>> => {
|
|
497
|
+
if (
|
|
498
|
+
Predicate.isTagged(input, tag) && Predicate.hasProperty(input, "reason") &&
|
|
499
|
+
Predicate.isTagged(input.reason, reasonTag)
|
|
500
|
+
) {
|
|
501
|
+
return Result.succeed(input.reason as any)
|
|
502
|
+
}
|
|
503
|
+
return Result.fail(input as any)
|
|
504
|
+
}
|
|
505
|
+
|
|
459
506
|
/**
|
|
460
507
|
* Creates a filter that only passes values equal to the specified value using structural equality.
|
|
461
508
|
*
|