effect 4.0.7 → 4.1.0
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/README.md +1 -1
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +3 -0
- package/dist/BigDecimal.js.map +1 -1
- package/dist/Channel.d.ts +12 -6
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +9 -3
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +7 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js.map +1 -1
- package/dist/Context.d.ts +18 -1
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +27 -8
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +81 -11
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +101 -26
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts +78 -0
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +123 -0
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +164 -7
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +11 -1
- package/dist/Effect.js.map +1 -1
- package/dist/FileSystem.d.ts +59 -4
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +9 -2
- package/dist/FileSystem.js.map +1 -1
- package/dist/Glob.d.ts +165 -0
- package/dist/Glob.d.ts.map +1 -0
- package/dist/Glob.js +127 -0
- package/dist/Glob.js.map +1 -0
- package/dist/Match.d.ts +86 -0
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +72 -0
- package/dist/Match.js.map +1 -1
- package/dist/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +59 -9
- package/dist/Pool.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +3 -3
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +8 -2
- package/dist/RcMap.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +7 -2
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +666 -41
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +650 -0
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +6 -1
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +22 -11
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +14 -0
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +16 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +8 -3
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +6 -3
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +5 -7
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +130 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +40 -0
- package/dist/Semaphore.js.map +1 -1
- package/dist/Stream.d.ts +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +9 -0
- package/dist/Stream.js.map +1 -1
- package/dist/Terminal.d.ts +18 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +1 -1
- package/dist/Terminal.js.map +1 -1
- package/dist/ai/AiError.d.ts +43 -116
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +53 -72
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Decision.d.ts +196 -15
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +130 -0
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +54 -13
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +123 -12
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/McpServer.d.ts +630 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +562 -116
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/McpTest.d.ts +130 -0
- package/dist/ai/McpTest.d.ts.map +1 -0
- package/dist/ai/McpTest.js +237 -0
- package/dist/ai/McpTest.js.map +1 -0
- package/dist/ai/Response.d.ts +1 -25
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +1 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +19 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +5 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js +17 -12
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +13 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +5 -3
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
- package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
- package/dist/cli/Argument.d.ts +6 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +2 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +65 -1
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +94 -37
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +23 -0
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +8 -0
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Flag.d.ts +107 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +37 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/HelpDoc.d.ts +15 -1
- package/dist/cli/HelpDoc.d.ts.map +1 -1
- package/dist/cli/Param.d.ts +6 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +2 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/Primitive.d.ts +14 -0
- package/dist/cli/Primitive.d.ts.map +1 -1
- package/dist/cli/Primitive.js +15 -1
- package/dist/cli/Primitive.js.map +1 -1
- package/dist/cli/Prompt.d.ts +1 -0
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +1 -0
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/help.d.ts.map +1 -1
- package/dist/cli/internal/help.js +17 -10
- package/dist/cli/internal/help.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +90 -28
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +72 -6
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SingleRunner.d.ts +3 -3
- package/dist/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/cluster/SingleRunner.js +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +37 -6
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +34 -7
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +23 -8
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/crypto/Aead.d.ts +322 -0
- package/dist/crypto/Aead.d.ts.map +1 -0
- package/dist/crypto/Aead.js +331 -0
- package/dist/crypto/Aead.js.map +1 -0
- package/dist/crypto/Cipher.d.ts +235 -0
- package/dist/crypto/Cipher.d.ts.map +1 -0
- package/dist/crypto/Cipher.js +233 -0
- package/dist/crypto/Cipher.js.map +1 -0
- package/dist/crypto/CryptoError.d.ts +212 -0
- package/dist/crypto/CryptoError.d.ts.map +1 -0
- package/dist/crypto/CryptoError.js +202 -0
- package/dist/crypto/CryptoError.js.map +1 -0
- package/dist/crypto/Digest.d.ts +143 -0
- package/dist/crypto/Digest.d.ts.map +1 -0
- package/dist/crypto/Digest.js +146 -0
- package/dist/crypto/Digest.js.map +1 -0
- package/dist/crypto/Kdf.d.ts +220 -0
- package/dist/crypto/Kdf.d.ts.map +1 -0
- package/dist/crypto/Kdf.js +212 -0
- package/dist/crypto/Kdf.js.map +1 -0
- package/dist/crypto/KeyAgreement.d.ts +323 -0
- package/dist/crypto/KeyAgreement.d.ts.map +1 -0
- package/dist/crypto/KeyAgreement.js +303 -0
- package/dist/crypto/KeyAgreement.js.map +1 -0
- package/dist/crypto/KeyFormat.d.ts +309 -0
- package/dist/crypto/KeyFormat.d.ts.map +1 -0
- package/dist/crypto/KeyFormat.js +556 -0
- package/dist/crypto/KeyFormat.js.map +1 -0
- package/dist/crypto/KeyWrap.d.ts +389 -0
- package/dist/crypto/KeyWrap.d.ts.map +1 -0
- package/dist/crypto/KeyWrap.js +381 -0
- package/dist/crypto/KeyWrap.js.map +1 -0
- package/dist/crypto/Mac.d.ts +277 -0
- package/dist/crypto/Mac.d.ts.map +1 -0
- package/dist/crypto/Mac.js +288 -0
- package/dist/crypto/Mac.js.map +1 -0
- package/dist/crypto/SecureRandom.d.ts +340 -0
- package/dist/crypto/SecureRandom.d.ts.map +1 -0
- package/dist/crypto/SecureRandom.js +257 -0
- package/dist/crypto/SecureRandom.js.map +1 -0
- package/dist/crypto/Signature.d.ts +448 -0
- package/dist/crypto/Signature.d.ts.map +1 -0
- package/dist/crypto/Signature.js +484 -0
- package/dist/crypto/Signature.js.map +1 -0
- package/dist/crypto/WebCrypto.d.ts +61 -0
- package/dist/crypto/WebCrypto.d.ts.map +1 -0
- package/dist/crypto/WebCrypto.js +63 -0
- package/dist/crypto/WebCrypto.js.map +1 -0
- package/dist/crypto/index.d.ts +65 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +66 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/internal/asymmetric.d.ts +2 -0
- package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
- package/dist/crypto/internal/asymmetric.js +210 -0
- package/dist/crypto/internal/asymmetric.js.map +1 -0
- package/dist/crypto/internal/chacha.d.ts +46 -0
- package/dist/crypto/internal/chacha.d.ts.map +1 -0
- package/dist/crypto/internal/chacha.js +885 -0
- package/dist/crypto/internal/chacha.js.map +1 -0
- package/dist/crypto/internal/der.d.ts +6 -0
- package/dist/crypto/internal/der.d.ts.map +1 -0
- package/dist/crypto/internal/der.js +86 -0
- package/dist/crypto/internal/der.js.map +1 -0
- package/dist/crypto/internal/digest.d.ts +2 -0
- package/dist/crypto/internal/digest.d.ts.map +1 -0
- package/dist/crypto/internal/digest.js +15 -0
- package/dist/crypto/internal/digest.js.map +1 -0
- package/dist/crypto/internal/key.d.ts +2 -0
- package/dist/crypto/internal/key.d.ts.map +1 -0
- package/dist/crypto/internal/key.js +170 -0
- package/dist/crypto/internal/key.js.map +1 -0
- package/dist/crypto/internal/md5.d.ts +39 -0
- package/dist/crypto/internal/md5.d.ts.map +1 -0
- package/dist/crypto/internal/md5.js +179 -0
- package/dist/crypto/internal/md5.js.map +1 -0
- package/dist/crypto/internal/webCrypto.d.ts +2 -0
- package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
- package/dist/crypto/internal/webCrypto.js +111 -0
- package/dist/crypto/internal/webCrypto.js.map +1 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +3 -2
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Csv.d.ts +608 -0
- package/dist/encoding/Csv.d.ts.map +1 -0
- package/dist/encoding/Csv.js +718 -0
- package/dist/encoding/Csv.js.map +1 -0
- package/dist/encoding/Hex.d.ts +3 -2
- package/dist/encoding/Hex.d.ts.map +1 -1
- package/dist/encoding/Hex.js +3 -2
- package/dist/encoding/Hex.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +42 -4
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Toml.d.ts +17 -3
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +104 -16
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Yaml.d.ts +8 -1
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +54 -18
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/index.d.ts +5 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +5 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +6 -3
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +119 -4
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +200 -12
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +41 -4
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +83 -64
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +279 -0
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +217 -1
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +200 -28
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +186 -16
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +3 -0
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +18 -10
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +769 -14
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +41 -64
- package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +4 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -1
- package/dist/eventlog/EventRow.js +12 -2
- package/dist/eventlog/EventRow.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +2 -2
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/internal/batches.d.ts +12 -0
- package/dist/eventlog/internal/batches.d.ts.map +1 -0
- package/dist/eventlog/internal/batches.js +26 -0
- package/dist/eventlog/internal/batches.js.map +1 -0
- package/dist/eventlog/internal/compaction.d.ts +38 -0
- package/dist/eventlog/internal/compaction.d.ts.map +1 -0
- package/dist/eventlog/internal/compaction.js +33 -0
- package/dist/eventlog/internal/compaction.js.map +1 -0
- package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
- package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
- package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
- package/dist/eventlog/internal/remoteCompaction.js +76 -0
- package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
- package/dist/http/Cookies.d.ts +172 -0
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +143 -1
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +26 -2
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +78 -15
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/HttpClient.d.ts +79 -8
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +65 -5
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +9 -5
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +2 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +3 -2
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpMethod.d.ts +7 -1
- package/dist/http/HttpMethod.d.ts.map +1 -1
- package/dist/http/HttpMethod.js +3 -8
- package/dist/http/HttpMethod.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +5 -2
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +6 -17
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +3 -2
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts +2 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +7 -5
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/ProblemDetails.d.ts +96 -0
- package/dist/http/ProblemDetails.d.ts.map +1 -0
- package/dist/http/ProblemDetails.js +98 -0
- package/dist/http/ProblemDetails.js.map +1 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/internal/decompression.js +3 -2
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/urlParams.js +8 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +19 -5
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +63 -0
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +51 -0
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +14 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +185 -13
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +128 -0
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
- package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/http-api/HttpApiMiddleware.js +85 -1
- package/dist/http-api/HttpApiMiddleware.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +76 -14
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +53 -0
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/effect.js +25 -14
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/glob.d.ts +2 -0
- package/dist/internal/glob.d.ts.map +1 -0
- package/dist/internal/glob.js +630 -0
- package/dist/internal/glob.js.map +1 -0
- package/dist/internal/matcher.js +10 -0
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/persistence.js +9 -0
- package/dist/internal/persistence.js.map +1 -1
- package/dist/internal/rcRef.js +4 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +6 -3
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/trie.js +42 -13
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/ulid.js +41 -0
- package/dist/internal/ulid.js.map +1 -1
- package/dist/internal/uuid.js +52 -8
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/observability/Otlp.d.ts +15 -4
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +10 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +7 -0
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -1
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/persistence/KeyValueStore.d.ts +47 -2
- package/dist/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/persistence/KeyValueStore.js +129 -18
- package/dist/persistence/KeyValueStore.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +9 -0
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +94 -52
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +10 -4
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +18 -11
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +207 -67
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js +56 -158
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +5 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/process/CommandLine.d.ts +294 -0
- package/dist/process/CommandLine.d.ts.map +1 -0
- package/dist/process/CommandLine.js +481 -0
- package/dist/process/CommandLine.js.map +1 -0
- package/dist/process/index.d.ts +5 -0
- package/dist/process/index.d.ts.map +1 -1
- package/dist/process/index.js +5 -0
- package/dist/process/index.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +2 -1
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +3 -4
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +16 -1
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +50 -16
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +10 -1
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/rpc/RpcMessage.js +1 -0
- package/dist/rpc/RpcMessage.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +6 -0
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +31 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +139 -66
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +14 -0
- package/dist/schema/Model.d.ts.map +1 -1
- package/dist/schema/Model.js +18 -3
- package/dist/schema/Model.js.map +1 -1
- package/dist/sql/Migrator.d.ts +0 -19
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +3 -48
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/MigratorFileSystem.d.ts +21 -0
- package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
- package/dist/sql/MigratorFileSystem.js +57 -0
- package/dist/sql/MigratorFileSystem.js.map +1 -0
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +5 -9
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +20 -6
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +0 -13
- package/dist/sql/Statement.js.map +1 -1
- package/dist/sql/index.js +1 -1
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +0 -5
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/internal/crypto.js +9 -8
- package/dist/workflow/internal/crypto.js.map +1 -1
- package/package.json +3 -1
- package/src/BigDecimal.ts +3 -0
- package/src/Channel.ts +17 -11
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +914 -85
- package/src/FileSystem.ts +65 -4
- package/src/Glob.ts +205 -0
- package/src/Match.ts +127 -0
- package/src/Pool.ts +73 -15
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Schedule.ts +26 -3
- package/src/Schema.ts +1189 -62
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaRepresentation.ts +19 -0
- package/src/SchemaTransformation.ts +8 -3
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +141 -0
- package/src/Stream.ts +15 -6
- package/src/Terminal.ts +19 -1
- package/src/ai/AiError.ts +56 -80
- package/src/ai/Decision.ts +257 -6
- package/src/ai/DecisionModel.ts +171 -28
- package/src/ai/McpServer.ts +1269 -286
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Response.ts +2 -22
- package/src/ai/Tool.ts +27 -8
- package/src/ai/index.ts +6 -0
- package/src/ai/internal/mcpCore.ts +78 -44
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
- package/src/ai/internal/mcpProtocol.ts +29 -0
- package/src/ai/internal/mcpRuntime.ts +9 -5
- package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
- package/src/cli/Argument.ts +6 -0
- package/src/cli/CliOutput.ts +117 -49
- package/src/cli/Command.ts +23 -0
- package/src/cli/Flag.ts +107 -0
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +6 -0
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/Sharding.ts +93 -26
- package/src/cluster/ShardingConfig.ts +41 -3
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +37 -27
- package/src/crypto/Aead.ts +517 -0
- package/src/crypto/Cipher.ts +326 -0
- package/src/crypto/CryptoError.ts +242 -0
- package/src/crypto/Digest.ts +167 -0
- package/src/crypto/Kdf.ts +315 -0
- package/src/crypto/KeyAgreement.ts +489 -0
- package/src/crypto/KeyFormat.ts +712 -0
- package/src/crypto/KeyWrap.ts +639 -0
- package/src/crypto/Mac.ts +386 -0
- package/src/crypto/SecureRandom.ts +459 -0
- package/src/crypto/Signature.ts +673 -0
- package/src/crypto/WebCrypto.ts +64 -0
- package/src/crypto/index.ts +78 -0
- package/src/crypto/internal/asymmetric.ts +329 -0
- package/src/crypto/internal/chacha.ts +1088 -0
- package/src/crypto/internal/der.ts +110 -0
- package/src/crypto/internal/digest.ts +16 -0
- package/src/crypto/internal/key.ts +235 -0
- package/src/crypto/internal/md5.ts +170 -0
- package/src/crypto/internal/webCrypto.ts +150 -0
- package/src/encoding/Base64Url.ts +5 -2
- package/src/encoding/Csv.ts +1298 -0
- package/src/encoding/Hex.ts +3 -2
- package/src/encoding/SchemaBinary.ts +40 -4
- package/src/encoding/Toml.ts +85 -20
- package/src/encoding/Yaml.ts +61 -18
- package/src/encoding/index.ts +6 -0
- package/src/eventlog/EventJournal.ts +4 -3
- package/src/eventlog/EventLog.ts +340 -15
- package/src/eventlog/EventLogEncryption.ts +118 -110
- package/src/eventlog/EventLogMessage.ts +273 -1
- package/src/eventlog/EventLogRemote.ts +367 -23
- package/src/eventlog/EventLogServer.ts +23 -8
- package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
- package/src/eventlog/EventLogSessionAuth.ts +56 -70
- package/src/eventlog/EventRow.ts +12 -3
- package/src/eventlog/SqlEventJournal.ts +2 -2
- package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
- package/src/eventlog/internal/batches.ts +30 -0
- package/src/eventlog/internal/compaction.ts +64 -0
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/http/Cookies.ts +281 -1
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +89 -22
- package/src/http/HttpClientRequest.ts +12 -9
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- package/src/http/HttpServerRequest.ts +15 -30
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/index.ts +6 -0
- package/src/http/internal/decompression.ts +4 -4
- package/src/http/internal/urlParams.ts +8 -0
- package/src/http-api/HttpApiBuilder.ts +24 -12
- package/src/http-api/HttpApiClient.ts +67 -1
- package/src/http-api/HttpApiEndpoint.ts +14 -5
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +105 -14
- package/src/index.ts +6 -6
- package/src/internal/effect.ts +34 -18
- package/src/internal/glob.ts +736 -0
- package/src/internal/matcher.ts +17 -0
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -1
- package/src/internal/schema/toCodeDocument.ts +7 -3
- package/src/internal/trie.ts +43 -14
- package/src/internal/ulid.ts +44 -0
- package/src/internal/uuid.ts +57 -16
- package/src/internal/version.ts +1 -1
- package/src/observability/Otlp.ts +21 -4
- package/src/observability/OtlpResource.ts +9 -1
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/process/ChildProcess.ts +255 -260
- package/src/process/ChildProcessSpawner.ts +5 -0
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +1 -1
- package/src/rpc/RpcClient.ts +62 -26
- package/src/rpc/RpcMessage.ts +10 -1
- package/src/rpc/RpcSerialization.ts +3 -0
- package/src/rpc/RpcServer.ts +176 -78
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +4 -63
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +2 -16
- package/src/sql/Statement.ts +8 -7
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/internal/crypto.ts +15 -11
- package/dist/Crypto.d.ts +0 -244
- package/dist/Crypto.d.ts.map +0 -1
- package/dist/Crypto.js +0 -139
- package/dist/Crypto.js.map +0 -1
- package/dist/testing/TestCrypto.d.ts +0 -73
- package/dist/testing/TestCrypto.d.ts.map +0 -1
- package/dist/testing/TestCrypto.js +0 -87
- package/dist/testing/TestCrypto.js.map +0 -1
- package/src/Crypto.ts +0 -347
- package/src/testing/TestCrypto.ts +0 -94
|
@@ -64,11 +64,21 @@ export interface KeyValueStore {
|
|
|
64
64
|
*/
|
|
65
65
|
readonly clear: Effect.Effect<void, KeyValueStoreError>
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Removes all entries whose key starts with the specified prefix.
|
|
69
|
+
*/
|
|
70
|
+
readonly clearPrefix: (prefix: string) => Effect.Effect<void, KeyValueStoreError>
|
|
71
|
+
|
|
67
72
|
/**
|
|
68
73
|
* Returns the number of entries.
|
|
69
74
|
*/
|
|
70
75
|
readonly size: Effect.Effect<number, KeyValueStoreError>
|
|
71
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Returns a snapshot of the keys in the store. The order is unspecified.
|
|
79
|
+
*/
|
|
80
|
+
readonly keys: Effect.Effect<ReadonlyArray<string>, KeyValueStoreError>
|
|
81
|
+
|
|
72
82
|
/**
|
|
73
83
|
* Updates the value of the specified key if it exists.
|
|
74
84
|
*/
|
|
@@ -138,6 +148,11 @@ export type MakeOptions = Partial<KeyValueStore> & {
|
|
|
138
148
|
* Returns the number of entries.
|
|
139
149
|
*/
|
|
140
150
|
readonly size: Effect.Effect<number, KeyValueStoreError>
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Returns a snapshot of the keys in the store. The order is unspecified.
|
|
154
|
+
*/
|
|
155
|
+
readonly keys: Effect.Effect<ReadonlyArray<string>, KeyValueStoreError>
|
|
141
156
|
}
|
|
142
157
|
|
|
143
158
|
/**
|
|
@@ -173,6 +188,11 @@ export type MakeStringOptions = Partial<Omit<KeyValueStore, "set">> & {
|
|
|
173
188
|
* Returns the number of entries.
|
|
174
189
|
*/
|
|
175
190
|
readonly size: Effect.Effect<number, KeyValueStoreError>
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Returns a snapshot of the keys in the store. The order is unspecified.
|
|
194
|
+
*/
|
|
195
|
+
readonly keys: Effect.Effect<ReadonlyArray<string>, KeyValueStoreError>
|
|
176
196
|
}
|
|
177
197
|
|
|
178
198
|
const ErrorTypeId = "~effect/persistence/KeyValueStore/KeyValueStoreError" as const
|
|
@@ -222,8 +242,12 @@ export const KeyValueStore: Context.Service<
|
|
|
222
242
|
*
|
|
223
243
|
* **Details**
|
|
224
244
|
*
|
|
225
|
-
* Default implementations are derived for `has`, `isEmpty`, `
|
|
226
|
-
* `modifyUint8Array` unless they are provided in the options.
|
|
245
|
+
* Default implementations are derived for `has`, `isEmpty`, `clearPrefix`,
|
|
246
|
+
* `modify`, and `modifyUint8Array` unless they are provided in the options.
|
|
247
|
+
*
|
|
248
|
+
* If `clearPrefix` is not provided, it delegates to `clear` for an empty prefix
|
|
249
|
+
* and otherwise removes each key returned by `keys` that starts with the
|
|
250
|
+
* prefix.
|
|
227
251
|
*
|
|
228
252
|
* @stability unstable
|
|
229
253
|
* @category constructors
|
|
@@ -234,6 +258,12 @@ export const make = (options: MakeOptions): KeyValueStore =>
|
|
|
234
258
|
[TypeId]: TypeId,
|
|
235
259
|
has: (key) => Effect.map(options.get(key), Predicate.isNotUndefined),
|
|
236
260
|
isEmpty: Effect.map(options.size, (size) => size === 0),
|
|
261
|
+
clearPrefix: (prefix) =>
|
|
262
|
+
prefix.length === 0 ? options.clear : Effect.flatMap(
|
|
263
|
+
options.keys,
|
|
264
|
+
(keys) =>
|
|
265
|
+
Effect.forEach(keys, (key) => key.startsWith(prefix) ? options.remove(key) : Effect.void, { discard: true })
|
|
266
|
+
),
|
|
237
267
|
modify: (key, f) =>
|
|
238
268
|
Effect.flatMap(
|
|
239
269
|
options.get(key),
|
|
@@ -300,6 +330,13 @@ export const makeStringOnly = (
|
|
|
300
330
|
* Returns a view of a `KeyValueStore` that prepends the given prefix to every
|
|
301
331
|
* key.
|
|
302
332
|
*
|
|
333
|
+
* **Details**
|
|
334
|
+
*
|
|
335
|
+
* `keys`, `size`, `isEmpty`, and `clear` only see entries whose key starts
|
|
336
|
+
* with the prefix, and `keys` returns them with the prefix removed. `keys`,
|
|
337
|
+
* `size`, and `isEmpty` list every key in the underlying store and filter the
|
|
338
|
+
* result, while `clear` delegates to `clearPrefix`.
|
|
339
|
+
*
|
|
303
340
|
* @stability unstable
|
|
304
341
|
* @category combinators
|
|
305
342
|
* @since 4.0.0
|
|
@@ -309,6 +346,13 @@ export const prefix: {
|
|
|
309
346
|
* Returns a view of a `KeyValueStore` that prepends the given prefix to every
|
|
310
347
|
* key.
|
|
311
348
|
*
|
|
349
|
+
* **Details**
|
|
350
|
+
*
|
|
351
|
+
* `keys`, `size`, `isEmpty`, and `clear` only see entries whose key starts
|
|
352
|
+
* with the prefix, and `keys` returns them with the prefix removed. `keys`,
|
|
353
|
+
* `size`, and `isEmpty` list every key in the underlying store and filter the
|
|
354
|
+
* result, while `clear` delegates to `clearPrefix`.
|
|
355
|
+
*
|
|
312
356
|
* @stability unstable
|
|
313
357
|
* @category combinators
|
|
314
358
|
* @since 4.0.0
|
|
@@ -318,21 +362,39 @@ export const prefix: {
|
|
|
318
362
|
* Returns a view of a `KeyValueStore` that prepends the given prefix to every
|
|
319
363
|
* key.
|
|
320
364
|
*
|
|
365
|
+
* **Details**
|
|
366
|
+
*
|
|
367
|
+
* `keys`, `size`, `isEmpty`, and `clear` only see entries whose key starts
|
|
368
|
+
* with the prefix, and `keys` returns them with the prefix removed. `keys`,
|
|
369
|
+
* `size`, and `isEmpty` list every key in the underlying store and filter the
|
|
370
|
+
* result, while `clear` delegates to `clearPrefix`.
|
|
371
|
+
*
|
|
321
372
|
* @stability unstable
|
|
322
373
|
* @category combinators
|
|
323
374
|
* @since 4.0.0
|
|
324
375
|
*/
|
|
325
376
|
(self: KeyValueStore, prefix: string): KeyValueStore
|
|
326
|
-
} = dual(2, (self: KeyValueStore, prefix: string): KeyValueStore =>
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
})
|
|
377
|
+
} = dual(2, (self: KeyValueStore, prefix: string): KeyValueStore => {
|
|
378
|
+
const keys = Effect.map(
|
|
379
|
+
self.keys,
|
|
380
|
+
(keys) => keys.flatMap((key) => key.startsWith(prefix) ? [key.slice(prefix.length)] : [])
|
|
381
|
+
)
|
|
382
|
+
return {
|
|
383
|
+
...self,
|
|
384
|
+
get: (key) => self.get(`${prefix}${key}`),
|
|
385
|
+
getUint8Array: (key) => self.getUint8Array(`${prefix}${key}`),
|
|
386
|
+
set: (key, value) => self.set(`${prefix}${key}`, value),
|
|
387
|
+
remove: (key) => self.remove(`${prefix}${key}`),
|
|
388
|
+
clear: self.clearPrefix(prefix),
|
|
389
|
+
clearPrefix: (key) => self.clearPrefix(`${prefix}${key}`),
|
|
390
|
+
keys,
|
|
391
|
+
size: Effect.map(keys, (keys) => keys.length),
|
|
392
|
+
isEmpty: Effect.map(keys, (keys) => keys.length === 0),
|
|
393
|
+
has: (key) => self.has(`${prefix}${key}`),
|
|
394
|
+
modify: (key, f) => self.modify(`${prefix}${key}`, f),
|
|
395
|
+
modifyUint8Array: (key, f) => self.modifyUint8Array(`${prefix}${key}`, f)
|
|
396
|
+
}
|
|
397
|
+
})
|
|
336
398
|
|
|
337
399
|
/**
|
|
338
400
|
* Provides a process-local in-memory `KeyValueStore` backed by a `Map`.
|
|
@@ -359,7 +421,14 @@ export const layerMemory: Layer.Layer<KeyValueStore> = Layer.sync(KeyValueStore)
|
|
|
359
421
|
set: (key: string, value: string | Uint8Array) => Effect.sync(() => store.set(key, value)),
|
|
360
422
|
remove: (key: string) => Effect.sync(() => store.delete(key)),
|
|
361
423
|
clear: Effect.sync(() => store.clear()),
|
|
362
|
-
|
|
424
|
+
clearPrefix: (prefix: string) =>
|
|
425
|
+
Effect.sync(() => {
|
|
426
|
+
for (const key of store.keys()) {
|
|
427
|
+
if (key.startsWith(prefix)) store.delete(key)
|
|
428
|
+
}
|
|
429
|
+
}),
|
|
430
|
+
size: Effect.sync(() => store.size),
|
|
431
|
+
keys: Effect.sync(() => Array.from(store.keys()))
|
|
363
432
|
})
|
|
364
433
|
})
|
|
365
434
|
|
|
@@ -449,13 +518,16 @@ export const layerFileSystem = (
|
|
|
449
518
|
)),
|
|
450
519
|
remove: (key: string) =>
|
|
451
520
|
withKeyPath("remove", key, (path) =>
|
|
452
|
-
Effect.mapError(
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
521
|
+
Effect.mapError(
|
|
522
|
+
fs.remove(path, { force: true }),
|
|
523
|
+
(cause) =>
|
|
524
|
+
new KeyValueStoreError({
|
|
525
|
+
method: "remove",
|
|
526
|
+
key,
|
|
527
|
+
message: `Unable to remove item with key ${key}`,
|
|
528
|
+
cause
|
|
529
|
+
})
|
|
530
|
+
)),
|
|
459
531
|
has: (key: string) =>
|
|
460
532
|
withKeyPath("has", key, (path) =>
|
|
461
533
|
Effect.mapError(fs.exists(path), (cause) =>
|
|
@@ -477,6 +549,29 @@ export const layerFileSystem = (
|
|
|
477
549
|
cause
|
|
478
550
|
})
|
|
479
551
|
),
|
|
552
|
+
clearPrefix: (prefix: string) =>
|
|
553
|
+
fs.readDirectory(directory).pipe(
|
|
554
|
+
Effect.flatMap((files) =>
|
|
555
|
+
Effect.forEach(
|
|
556
|
+
files.filter((file) => decodeFileKey(file)?.startsWith(prefix)),
|
|
557
|
+
(file) =>
|
|
558
|
+
Effect.catchTag(
|
|
559
|
+
fs.remove(path.join(directory, file)),
|
|
560
|
+
"PlatformError",
|
|
561
|
+
(cause) => cause.reason._tag === "NotFound" ? Effect.void : Effect.fail(cause)
|
|
562
|
+
),
|
|
563
|
+
{ discard: true }
|
|
564
|
+
)
|
|
565
|
+
),
|
|
566
|
+
Effect.mapError((cause) =>
|
|
567
|
+
new KeyValueStoreError({
|
|
568
|
+
method: "clearPrefix",
|
|
569
|
+
key: prefix,
|
|
570
|
+
message: `Unable to clear items with prefix ${prefix}`,
|
|
571
|
+
cause
|
|
572
|
+
})
|
|
573
|
+
)
|
|
574
|
+
),
|
|
480
575
|
size: Effect.matchEffect(
|
|
481
576
|
fs.readDirectory(directory),
|
|
482
577
|
{
|
|
@@ -490,10 +585,30 @@ export const layerFileSystem = (
|
|
|
490
585
|
})
|
|
491
586
|
)
|
|
492
587
|
}
|
|
588
|
+
),
|
|
589
|
+
keys: fs.readDirectory(directory).pipe(
|
|
590
|
+
Effect.flatMap((files) => Effect.try(() => files.map(decodeURIComponent))),
|
|
591
|
+
Effect.mapError((cause) =>
|
|
592
|
+
new KeyValueStoreError({
|
|
593
|
+
method: "keys",
|
|
594
|
+
message: `Unable to get keys`,
|
|
595
|
+
cause
|
|
596
|
+
})
|
|
597
|
+
)
|
|
493
598
|
)
|
|
494
599
|
})
|
|
495
600
|
}))
|
|
496
601
|
|
|
602
|
+
const decodeFileKey = (file: string): string | undefined => {
|
|
603
|
+
try {
|
|
604
|
+
return decodeURIComponent(file)
|
|
605
|
+
} catch {
|
|
606
|
+
return undefined
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
const escapeLike = (prefix: string): string => `${prefix.replace(/[!%_[\]]/g, "!$&")}%`
|
|
611
|
+
|
|
497
612
|
/**
|
|
498
613
|
* Options for configuring the SQL-backed `KeyValueStore` layer.
|
|
499
614
|
*
|
|
@@ -528,7 +643,8 @@ export const layerSql = (
|
|
|
528
643
|
Layer.effect(KeyValueStore)(
|
|
529
644
|
Effect.gen(function*() {
|
|
530
645
|
const sql = (yield* SqlClient.SqlClient).withoutTransforms()
|
|
531
|
-
const
|
|
646
|
+
const tableName = options.table ?? "effect_key_value_store"
|
|
647
|
+
const table = sql(tableName)
|
|
532
648
|
|
|
533
649
|
yield* sql.onDialectOrElse({
|
|
534
650
|
mysql: () =>
|
|
@@ -549,7 +665,7 @@ export const layerSql = (
|
|
|
549
665
|
`,
|
|
550
666
|
mssql: () =>
|
|
551
667
|
sql`
|
|
552
|
-
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name=${
|
|
668
|
+
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name=${tableName} AND xtype='U')
|
|
553
669
|
CREATE TABLE ${table} (
|
|
554
670
|
id NVARCHAR(450) PRIMARY KEY,
|
|
555
671
|
value VARBINARY(MAX) NOT NULL,
|
|
@@ -601,6 +717,23 @@ export const layerSql = (
|
|
|
601
717
|
`.unprepared
|
|
602
718
|
})
|
|
603
719
|
|
|
720
|
+
// The first LIKE uses the primary key index. On mysql and mssql it follows
|
|
721
|
+
// the column collation, which is usually case / accent-insensitive, so a
|
|
722
|
+
// second binary LIKE keeps only exact prefix matches.
|
|
723
|
+
const deleteByPrefix = sql.onDialectOrElse({
|
|
724
|
+
// sqlite LIKE is case-insensitive, so compare the leading characters
|
|
725
|
+
orElse: () => (prefix: string) => sql`DELETE FROM ${table} WHERE substr(id, 1, length(${prefix})) = ${prefix}`,
|
|
726
|
+
pg: () => (prefix: string) => sql`DELETE FROM ${table} WHERE id LIKE ${escapeLike(prefix)} ESCAPE '!'`,
|
|
727
|
+
mysql: () => (prefix: string) => {
|
|
728
|
+
const pattern = escapeLike(prefix)
|
|
729
|
+
return sql`DELETE FROM ${table} WHERE id LIKE ${pattern} ESCAPE '!' AND CONVERT(id USING utf8mb4) COLLATE utf8mb4_bin LIKE ${pattern} ESCAPE '!'`
|
|
730
|
+
},
|
|
731
|
+
mssql: () => (prefix: string) => {
|
|
732
|
+
const pattern = escapeLike(prefix)
|
|
733
|
+
return sql`DELETE FROM ${table} WHERE id LIKE ${pattern} ESCAPE '!' AND id COLLATE Latin1_General_100_BIN2 LIKE ${pattern} ESCAPE '!'`
|
|
734
|
+
}
|
|
735
|
+
})
|
|
736
|
+
|
|
604
737
|
const encoder = new TextEncoder()
|
|
605
738
|
const decoder = new TextDecoder()
|
|
606
739
|
const ValueTypeString = 0
|
|
@@ -712,6 +845,18 @@ export const layerSql = (
|
|
|
712
845
|
),
|
|
713
846
|
Effect.asVoid
|
|
714
847
|
),
|
|
848
|
+
clearPrefix: (prefix: string) =>
|
|
849
|
+
deleteByPrefix(prefix).pipe(
|
|
850
|
+
Effect.mapError((cause) =>
|
|
851
|
+
new KeyValueStoreError({
|
|
852
|
+
method: "clearPrefix",
|
|
853
|
+
key: prefix,
|
|
854
|
+
message: `Unable to clear items with prefix ${prefix}`,
|
|
855
|
+
cause
|
|
856
|
+
})
|
|
857
|
+
),
|
|
858
|
+
Effect.asVoid
|
|
859
|
+
),
|
|
715
860
|
size: sql<{ count: number }>`SELECT COUNT(*) as count FROM ${table}`.pipe(
|
|
716
861
|
Effect.mapError((cause) =>
|
|
717
862
|
new KeyValueStoreError({
|
|
@@ -721,6 +866,16 @@ export const layerSql = (
|
|
|
721
866
|
})
|
|
722
867
|
),
|
|
723
868
|
Effect.map((rows) => rows.length === 0 ? 0 : Number(rows[0].count))
|
|
869
|
+
),
|
|
870
|
+
keys: sql<{ id: string }>`SELECT id FROM ${table}`.pipe(
|
|
871
|
+
Effect.mapError((cause) =>
|
|
872
|
+
new KeyValueStoreError({
|
|
873
|
+
method: "keys",
|
|
874
|
+
message: `Unable to get keys`,
|
|
875
|
+
cause
|
|
876
|
+
})
|
|
877
|
+
),
|
|
878
|
+
Effect.map((rows) => rows.map((row) => row.id))
|
|
724
879
|
)
|
|
725
880
|
})
|
|
726
881
|
})
|
|
@@ -767,6 +922,11 @@ export interface SchemaStore<S extends Schema.Constraint> {
|
|
|
767
922
|
*/
|
|
768
923
|
readonly size: Effect.Effect<number, KeyValueStoreError>
|
|
769
924
|
|
|
925
|
+
/**
|
|
926
|
+
* Returns a snapshot of the keys in the store. The order is unspecified.
|
|
927
|
+
*/
|
|
928
|
+
readonly keys: Effect.Effect<ReadonlyArray<string>, KeyValueStoreError>
|
|
929
|
+
|
|
770
930
|
/**
|
|
771
931
|
* Updates the value of the specified key if it exists.
|
|
772
932
|
*/
|
|
@@ -837,6 +997,7 @@ export const toSchemaStore = <S extends Schema.Constraint>(self: KeyValueStore,
|
|
|
837
997
|
remove: self.remove,
|
|
838
998
|
clear: self.clear,
|
|
839
999
|
size: self.size,
|
|
1000
|
+
keys: self.keys,
|
|
840
1001
|
has: self.has,
|
|
841
1002
|
isEmpty: self.isEmpty
|
|
842
1003
|
}
|
|
@@ -907,6 +1068,25 @@ export const layerStorage = (
|
|
|
907
1068
|
})
|
|
908
1069
|
}),
|
|
909
1070
|
|
|
1071
|
+
clearPrefix: (prefix: string) =>
|
|
1072
|
+
Effect.try({
|
|
1073
|
+
try: () => {
|
|
1074
|
+
const keys: Array<string> = []
|
|
1075
|
+
for (let i = 0; i < storage.length; i++) {
|
|
1076
|
+
const key = storage.key(i)
|
|
1077
|
+
if (key !== null && key.startsWith(prefix)) keys.push(key)
|
|
1078
|
+
}
|
|
1079
|
+
for (const key of keys) storage.removeItem(key)
|
|
1080
|
+
},
|
|
1081
|
+
catch: (cause) =>
|
|
1082
|
+
new KeyValueStoreError({
|
|
1083
|
+
key: prefix,
|
|
1084
|
+
method: "clearPrefix",
|
|
1085
|
+
message: `Unable to clear items with prefix ${prefix}`,
|
|
1086
|
+
cause
|
|
1087
|
+
})
|
|
1088
|
+
}),
|
|
1089
|
+
|
|
910
1090
|
size: Effect.try({
|
|
911
1091
|
try: () => storage.length,
|
|
912
1092
|
catch: (cause) =>
|
|
@@ -915,6 +1095,23 @@ export const layerStorage = (
|
|
|
915
1095
|
message: `Unable to get size`,
|
|
916
1096
|
cause
|
|
917
1097
|
})
|
|
1098
|
+
}),
|
|
1099
|
+
|
|
1100
|
+
keys: Effect.try({
|
|
1101
|
+
try: () => {
|
|
1102
|
+
const keys: Array<string> = []
|
|
1103
|
+
for (let i = 0; i < storage.length; i++) {
|
|
1104
|
+
const key = storage.key(i)
|
|
1105
|
+
if (key !== null) keys.push(key)
|
|
1106
|
+
}
|
|
1107
|
+
return keys
|
|
1108
|
+
},
|
|
1109
|
+
catch: (cause) =>
|
|
1110
|
+
new KeyValueStoreError({
|
|
1111
|
+
method: "keys",
|
|
1112
|
+
message: `Unable to get keys`,
|
|
1113
|
+
cause
|
|
1114
|
+
})
|
|
918
1115
|
})
|
|
919
1116
|
})
|
|
920
1117
|
})
|