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
package/src/encoding/Hex.ts
CHANGED
|
@@ -46,8 +46,9 @@ export const encode: (input: Uint8Array | string) => string = (input) =>
|
|
|
46
46
|
* coercion rules.
|
|
47
47
|
*
|
|
48
48
|
* This function uses `Math.random()` and is not cryptographically secure. For
|
|
49
|
-
* security-sensitive values,
|
|
50
|
-
*
|
|
49
|
+
* security-sensitive values, draw bytes with the `randomBytes` method of the
|
|
50
|
+
* `SecureRandom` service from `effect/crypto/SecureRandom`, and encode them with
|
|
51
|
+
* {@link encode}.
|
|
51
52
|
*
|
|
52
53
|
* @stability stable
|
|
53
54
|
* @category encoding
|
|
@@ -80,6 +80,7 @@ const codecCache = new WeakMap<Schema.Constraint, toCodec<any>>()
|
|
|
80
80
|
const fingerprintCodecCache = new WeakMap<Schema.Constraint, toCodec<any>>()
|
|
81
81
|
const directCodecCache = new WeakMap<Schema.Constraint, toCodec<any>>()
|
|
82
82
|
const directFingerprintCodecCache = new WeakMap<Schema.Constraint, toCodec<any>>()
|
|
83
|
+
const strictCodecCache = new WeakMap<Schema.Constraint, toCodec<any>>()
|
|
83
84
|
|
|
84
85
|
/**
|
|
85
86
|
* Derives a compact binary codec from a schema.
|
|
@@ -135,6 +136,27 @@ export function toCodec<S extends Schema.Constraint>(schema: S, options?: Option
|
|
|
135
136
|
return codec
|
|
136
137
|
}
|
|
137
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Derives the default-mode {@link toCodec} codec, except that decoding rejects
|
|
141
|
+
* struct fields the schema does not know instead of skipping them.
|
|
142
|
+
*
|
|
143
|
+
* @internal
|
|
144
|
+
*/
|
|
145
|
+
export function toCodecStrict<S extends Schema.Constraint>(schema: S): toCodec<S> {
|
|
146
|
+
const cached = strictCodecCache.get(schema)
|
|
147
|
+
if (cached !== undefined) return cached
|
|
148
|
+
const { exact, layout, recursive, target } = compileTarget(schema)
|
|
149
|
+
const trusted: Trusted | undefined = exact ? { value: undefined } : undefined
|
|
150
|
+
const codec = assembleCodec<S>(
|
|
151
|
+
trusted === undefined ? target : withTrustedDecode(target, trusted, !recursive),
|
|
152
|
+
layout,
|
|
153
|
+
strictMode,
|
|
154
|
+
trusted
|
|
155
|
+
)
|
|
156
|
+
strictCodecCache.set(schema, codec)
|
|
157
|
+
return codec
|
|
158
|
+
}
|
|
159
|
+
|
|
138
160
|
/**
|
|
139
161
|
* Derives the {@link toCodec} codec without the schema pass around the binary
|
|
140
162
|
* layer.
|
|
@@ -571,7 +593,7 @@ function makeParser<T>(
|
|
|
571
593
|
issuePathLen = 0
|
|
572
594
|
const bodyStart = pos + headerLen
|
|
573
595
|
indexSignatures.beginFrame()
|
|
574
|
-
body.reset(buf, bodyStart, bodyStart + frameLen, parseOptions, indexSignatures, mode
|
|
596
|
+
body.reset(buf, bodyStart, bodyStart + frameLen, parseOptions, indexSignatures, mode, dict)
|
|
575
597
|
const value = decodeFrameBody(layout, body, mode)
|
|
576
598
|
out.push((decodeEncoded === undefined ? value : decodeEncoded(value)) as T)
|
|
577
599
|
} catch (e) {
|
|
@@ -1541,6 +1563,7 @@ class Reader {
|
|
|
1541
1563
|
options: SchemaAST.ParseOptions = SchemaAST.defaultParseOptions
|
|
1542
1564
|
indexSignatures: IndexSignatureCache | undefined
|
|
1543
1565
|
positional = false
|
|
1566
|
+
rejectUnknownFields = false
|
|
1544
1567
|
// Handed to the row-run field's immediate consumer, then cleared.
|
|
1545
1568
|
intern: Array<unknown> | undefined
|
|
1546
1569
|
// String tables shared by every frame on one connection; `undefined` for a
|
|
@@ -1552,7 +1575,7 @@ class Reader {
|
|
|
1552
1575
|
end: number,
|
|
1553
1576
|
options: SchemaAST.ParseOptions,
|
|
1554
1577
|
indexSignatures: IndexSignatureCache | undefined,
|
|
1555
|
-
|
|
1578
|
+
mode: Mode,
|
|
1556
1579
|
dict: DictRead | undefined
|
|
1557
1580
|
) {
|
|
1558
1581
|
this.nesting = 0
|
|
@@ -1562,7 +1585,8 @@ class Reader {
|
|
|
1562
1585
|
this.end = end
|
|
1563
1586
|
this.options = options
|
|
1564
1587
|
this.indexSignatures = indexSignatures
|
|
1565
|
-
this.positional = positional
|
|
1588
|
+
this.positional = mode.positional
|
|
1589
|
+
this.rejectUnknownFields = mode.rejectUnknownFields
|
|
1566
1590
|
this.intern = undefined
|
|
1567
1591
|
this.dict = dict
|
|
1568
1592
|
}
|
|
@@ -1576,6 +1600,7 @@ class Reader {
|
|
|
1576
1600
|
this.options = SchemaAST.defaultParseOptions
|
|
1577
1601
|
this.indexSignatures = undefined
|
|
1578
1602
|
this.positional = false
|
|
1603
|
+
this.rejectUnknownFields = false
|
|
1579
1604
|
this.intern = undefined
|
|
1580
1605
|
this.dict = undefined
|
|
1581
1606
|
}
|
|
@@ -2908,6 +2933,7 @@ function fingerprintBytes(lo: number, hi: number): Uint8Array {
|
|
|
2908
2933
|
|
|
2909
2934
|
interface Mode {
|
|
2910
2935
|
readonly positional: boolean
|
|
2936
|
+
readonly rejectUnknownFields: boolean
|
|
2911
2937
|
readonly envelope: number
|
|
2912
2938
|
readonly expectedEnvelope: string
|
|
2913
2939
|
readonly fingerprint: Uint8Array
|
|
@@ -2915,15 +2941,19 @@ interface Mode {
|
|
|
2915
2941
|
|
|
2916
2942
|
const defaultMode: Mode = {
|
|
2917
2943
|
positional: false,
|
|
2944
|
+
rejectUnknownFields: false,
|
|
2918
2945
|
envelope: ENVELOPE,
|
|
2919
2946
|
expectedEnvelope: "version 2 envelope, flags 0",
|
|
2920
2947
|
fingerprint: new Uint8Array(8)
|
|
2921
2948
|
}
|
|
2922
2949
|
|
|
2950
|
+
const strictMode: Mode = { ...defaultMode, rejectUnknownFields: true }
|
|
2951
|
+
|
|
2923
2952
|
function fingerprintMode(layout: Layout): Mode {
|
|
2924
2953
|
const fingerprint = layoutFingerprint(layout)
|
|
2925
2954
|
return {
|
|
2926
2955
|
positional: true,
|
|
2956
|
+
rejectUnknownFields: false,
|
|
2927
2957
|
envelope: ENVELOPE_FINGERPRINT,
|
|
2928
2958
|
expectedEnvelope: "version 2 envelope, flags 1",
|
|
2929
2959
|
fingerprint: fingerprintBytes(
|
|
@@ -4275,6 +4305,7 @@ function decodeExtraPair(
|
|
|
4275
4305
|
const signature = layout.extraAll ??
|
|
4276
4306
|
(r.indexSignatures ??= new IndexSignatureCache(r.options)).find(layout, key)
|
|
4277
4307
|
if (signature === undefined) {
|
|
4308
|
+
if (r.rejectUnknownFields) invalid("a key matching an index signature", key, r.options)
|
|
4278
4309
|
skipFieldPayload(kind, r)
|
|
4279
4310
|
return
|
|
4280
4311
|
}
|
|
@@ -4371,6 +4402,7 @@ function decodeScalarField(kind: number, r: Reader): unknown {
|
|
|
4371
4402
|
|
|
4372
4403
|
function decodeFieldPayload(layout: Layout, wireMask: number, kind: number, r: Reader): unknown {
|
|
4373
4404
|
if ((wireMask & (1 << kind)) === 0) {
|
|
4405
|
+
if (r.rejectUnknownFields) invalid("matching field wire kind", kind, r.options)
|
|
4374
4406
|
skipFieldPayload(kind, r)
|
|
4375
4407
|
return ABSENT
|
|
4376
4408
|
}
|
|
@@ -4427,6 +4459,7 @@ function decodeStruct(layout: StructLayout, r: Reader): unknown {
|
|
|
4427
4459
|
if (field !== undefined) cursor = field.index + 1
|
|
4428
4460
|
}
|
|
4429
4461
|
if (field === undefined) {
|
|
4462
|
+
if (r.rejectUnknownFields) invalid("a known field id", id, r.options)
|
|
4430
4463
|
if (seenUnknown === undefined) seenUnknown = new Set()
|
|
4431
4464
|
else if (seenUnknown.has(id)) invalid("unique field ids", undefined, r.options)
|
|
4432
4465
|
seenUnknown.add(id)
|
|
@@ -4646,6 +4679,7 @@ function decodeRunRow(
|
|
|
4646
4679
|
} else {
|
|
4647
4680
|
slot = struct.byId.get(id)
|
|
4648
4681
|
if (slot === undefined) {
|
|
4682
|
+
if (r.rejectUnknownFields) invalid("a known field id", id, r.options)
|
|
4649
4683
|
if (seenIds === undefined) seenIds = new Set([id])
|
|
4650
4684
|
else if (seenIds.has(id)) invalid("unique field ids", undefined, r.options)
|
|
4651
4685
|
else seenIds.add(id)
|
|
@@ -4843,6 +4877,7 @@ function decodeUnion(layout: UnionLayout, r: Reader): unknown {
|
|
|
4843
4877
|
const tag = r.u32le()
|
|
4844
4878
|
const variant = layout.byTag.get(tag)
|
|
4845
4879
|
if (variant === undefined) {
|
|
4880
|
+
if (r.rejectUnknownFields) invalid("known union member", tag, r.options)
|
|
4846
4881
|
r.take(r.remaining)
|
|
4847
4882
|
return ABSENT
|
|
4848
4883
|
}
|
|
@@ -4857,6 +4892,7 @@ function decodeUnion(layout: UnionLayout, r: Reader): unknown {
|
|
|
4857
4892
|
}
|
|
4858
4893
|
const member = layout.byKind.get(kind)
|
|
4859
4894
|
if (member === undefined) {
|
|
4895
|
+
if (r.rejectUnknownFields) invalid("known union member", kind, r.options)
|
|
4860
4896
|
r.take(r.remaining)
|
|
4861
4897
|
return ABSENT
|
|
4862
4898
|
}
|
|
@@ -5090,7 +5126,7 @@ function decodeOneShot(
|
|
|
5090
5126
|
const r = pooledReader ?? new Reader()
|
|
5091
5127
|
const pooled = r === pooledReader
|
|
5092
5128
|
if (pooled) pooledReader = undefined
|
|
5093
|
-
r.reset(bytes, 0, bytes.length, options, undefined, mode
|
|
5129
|
+
r.reset(bytes, 0, bytes.length, options, undefined, mode, undefined)
|
|
5094
5130
|
const savedPathLen = issuePathLen
|
|
5095
5131
|
issuePathLen = 0
|
|
5096
5132
|
try {
|
package/src/encoding/Toml.ts
CHANGED
|
@@ -32,12 +32,34 @@
|
|
|
32
32
|
* SOFTWARE.
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
|
+
import * as Result from "../Result.ts"
|
|
36
|
+
import { EncodingError } from "./EncodingError.ts"
|
|
37
|
+
|
|
35
38
|
type Table = Record<string, unknown>
|
|
36
39
|
|
|
37
40
|
const hasOwn = Object.prototype.hasOwnProperty
|
|
38
41
|
const makeTable = (): Table => Object.create(null)
|
|
39
42
|
const isTable = (value: unknown): value is Table =>
|
|
40
43
|
typeof value === "object" && value !== null && !Array.isArray(value) && !(value instanceof Date)
|
|
44
|
+
const localDatePattern = /^(\d{4})-(\d{2})-(\d{2})$/
|
|
45
|
+
const localTimePattern = /^(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?$/
|
|
46
|
+
const numericOffsetPattern = /^[+-](\d{2}):(\d{2})$/
|
|
47
|
+
const dateTimePattern = /^(\d{4}-\d{2}-\d{2})[Tt](\d{2}:\d{2}:\d{2}(?:\.\d+)?)([Zz]|[+-]\d{2}:\d{2})?$/
|
|
48
|
+
const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
|
49
|
+
const isValidDate = (date: string): boolean => {
|
|
50
|
+
const [, year, month, day] = localDatePattern.exec(date)!.map(Number)
|
|
51
|
+
const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)
|
|
52
|
+
const days = month === 2 && leap ? 29 : daysInMonth[month - 1]
|
|
53
|
+
return month >= 1 && month <= 12 && day >= 1 && day <= days
|
|
54
|
+
}
|
|
55
|
+
const isValidTime = (time: string): boolean => {
|
|
56
|
+
const [, hour, minute, second] = localTimePattern.exec(time)!.map(Number)
|
|
57
|
+
return hour <= 23 && minute <= 59 && second <= 60
|
|
58
|
+
}
|
|
59
|
+
const isValidOffset = (offset: string): boolean => {
|
|
60
|
+
const numeric = numericOffsetPattern.exec(offset)
|
|
61
|
+
return numeric === null || (Number(numeric[1]) <= 23 && Number(numeric[2]) <= 59)
|
|
62
|
+
}
|
|
41
63
|
|
|
42
64
|
class TomlParser {
|
|
43
65
|
readonly root = makeTable()
|
|
@@ -49,6 +71,8 @@ class TomlParser {
|
|
|
49
71
|
private readonly explicitTables = new Set<Table>()
|
|
50
72
|
// Tables defined by dotted keys; a header cannot define them again.
|
|
51
73
|
private readonly dottedTables = new Set<Table>()
|
|
74
|
+
// Values parsed from `[...]` or `{...}` are complete; headers and dotted keys cannot extend them.
|
|
75
|
+
private readonly inlineValues = new Set<unknown>()
|
|
52
76
|
|
|
53
77
|
constructor(input: string) {
|
|
54
78
|
this.input = input
|
|
@@ -104,6 +128,9 @@ class TomlParser {
|
|
|
104
128
|
const key = path[index]
|
|
105
129
|
const last = index === path.length - 1
|
|
106
130
|
let value = table[key]
|
|
131
|
+
if (this.inlineValues.has(value)) {
|
|
132
|
+
this.fail(`Cannot redefine existing key '${path.slice(0, index + 1).join(".")}'`)
|
|
133
|
+
}
|
|
107
134
|
|
|
108
135
|
if (last && array) {
|
|
109
136
|
if (value === undefined) {
|
|
@@ -142,7 +169,7 @@ class TomlParser {
|
|
|
142
169
|
const child = makeTable()
|
|
143
170
|
table[key] = child
|
|
144
171
|
table = child
|
|
145
|
-
} else if (isTable(existing) && !this.explicitTables.has(existing)) {
|
|
172
|
+
} else if (isTable(existing) && !this.explicitTables.has(existing) && !this.inlineValues.has(existing)) {
|
|
146
173
|
table = existing
|
|
147
174
|
} else {
|
|
148
175
|
this.fail(`Cannot redefine existing key '${keys.slice(0, index + 1).join(".")}'`)
|
|
@@ -198,10 +225,14 @@ class TomlParser {
|
|
|
198
225
|
return this.parseLiteralString(this.input.startsWith("'''", this.index))
|
|
199
226
|
}
|
|
200
227
|
if (character === "[") {
|
|
201
|
-
|
|
228
|
+
const array = this.parseArray()
|
|
229
|
+
this.inlineValues.add(array)
|
|
230
|
+
return array
|
|
202
231
|
}
|
|
203
232
|
if (character === "{") {
|
|
204
|
-
|
|
233
|
+
const table = this.parseInlineTable()
|
|
234
|
+
this.inlineValues.add(table)
|
|
235
|
+
return table
|
|
205
236
|
}
|
|
206
237
|
|
|
207
238
|
const spaceSeparatedDateTime = /^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:[Zz]|[+-]\d{2}:\d{2})?)/
|
|
@@ -233,21 +264,21 @@ class TomlParser {
|
|
|
233
264
|
}
|
|
234
265
|
|
|
235
266
|
private parseDate(token: string): Date | string | undefined {
|
|
236
|
-
const
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
267
|
+
const dateTime = dateTimePattern.exec(token)
|
|
268
|
+
if (dateTime !== null) {
|
|
269
|
+
const [, date, time, offset] = dateTime
|
|
270
|
+
// `Date` cannot represent a leap second, so offset date-times reject `:60`
|
|
271
|
+
const offsetValid = offset === undefined || (isValidOffset(offset) && time.slice(6, 8) !== "60")
|
|
272
|
+
if (!isValidDate(date) || !isValidTime(time) || !offsetValid) {
|
|
241
273
|
this.fail(`Invalid date-time '${token}'`)
|
|
242
274
|
}
|
|
243
|
-
return
|
|
275
|
+
return offset === undefined ? `${date}T${time}` : new Date(`${date}T${time}${offset.toUpperCase()}`)
|
|
244
276
|
}
|
|
245
|
-
if (
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
return token.replace("t", "T")
|
|
277
|
+
if (localDatePattern.test(token)) {
|
|
278
|
+
return isValidDate(token) ? token : this.fail(`Invalid date-time '${token}'`)
|
|
279
|
+
}
|
|
280
|
+
if (localTimePattern.test(token)) {
|
|
281
|
+
return isValidTime(token) ? token : this.fail(`Invalid date-time '${token}'`)
|
|
251
282
|
}
|
|
252
283
|
return undefined
|
|
253
284
|
}
|
|
@@ -292,7 +323,7 @@ class TomlParser {
|
|
|
292
323
|
while (!this.done) {
|
|
293
324
|
if (multiline && this.input.startsWith("\"\"\"", this.index)) {
|
|
294
325
|
this.advance(3)
|
|
295
|
-
return output
|
|
326
|
+
return output + this.closingQuotes("\"")
|
|
296
327
|
}
|
|
297
328
|
const character = this.peek()
|
|
298
329
|
if (!multiline && character === "\"") {
|
|
@@ -362,7 +393,7 @@ class TomlParser {
|
|
|
362
393
|
if (multiline && this.input.startsWith("'''", this.index)) {
|
|
363
394
|
const output = this.input.slice(start, this.index)
|
|
364
395
|
this.advance(3)
|
|
365
|
-
return output
|
|
396
|
+
return output + this.closingQuotes("'")
|
|
366
397
|
}
|
|
367
398
|
if (!multiline && this.peek() === "'") {
|
|
368
399
|
const output = this.input.slice(start, this.index)
|
|
@@ -377,6 +408,15 @@ class TomlParser {
|
|
|
377
408
|
this.fail("Unterminated literal string")
|
|
378
409
|
}
|
|
379
410
|
|
|
411
|
+
private closingQuotes(quote: string): string {
|
|
412
|
+
let quotes = ""
|
|
413
|
+
while (quotes.length < 2 && this.peek() === quote) {
|
|
414
|
+
quotes += quote
|
|
415
|
+
this.advance()
|
|
416
|
+
}
|
|
417
|
+
return quotes
|
|
418
|
+
}
|
|
419
|
+
|
|
380
420
|
private parseArray(): Array<unknown> {
|
|
381
421
|
this.expect("[")
|
|
382
422
|
const output: Array<unknown> = []
|
|
@@ -515,11 +555,36 @@ class TomlParser {
|
|
|
515
555
|
*
|
|
516
556
|
* **Details**
|
|
517
557
|
*
|
|
518
|
-
*
|
|
519
|
-
*
|
|
558
|
+
* Returns `Result.succeed` with the parsed record, or `Result.fail` with an
|
|
559
|
+
* `EncodingError` when the input is not valid TOML. Offset date-times are
|
|
560
|
+
* represented by `Date`, matching the package this parser replaces. Local
|
|
561
|
+
* dates and times remain strings.
|
|
562
|
+
*
|
|
563
|
+
* **Example** (Parsing a TOML document)
|
|
564
|
+
*
|
|
565
|
+
* ```ts import.meta.vitest
|
|
566
|
+
* import { Result } from "effect"
|
|
567
|
+
* import { Toml } from "effect/encoding"
|
|
568
|
+
*
|
|
569
|
+
* Toml.parse("port = 8080") // => Result.succeed({ port: 8080 })
|
|
570
|
+
* Result.isFailure(Toml.parse("port = ")) // => true
|
|
571
|
+
* ```
|
|
520
572
|
*
|
|
521
573
|
* @stability unstable
|
|
522
574
|
* @category decoding
|
|
523
575
|
* @since 4.0.0
|
|
524
576
|
*/
|
|
525
|
-
export const parse = (input: string): Record<string, unknown> =>
|
|
577
|
+
export const parse = (input: string): Result.Result<Record<string, unknown>, EncodingError> => {
|
|
578
|
+
try {
|
|
579
|
+
return Result.succeed(new TomlParser(input.replace(/^\uFEFF/, "")).parse());
|
|
580
|
+
} catch (e) {
|
|
581
|
+
return Result.fail(
|
|
582
|
+
new EncodingError({
|
|
583
|
+
module: "Toml",
|
|
584
|
+
kind: "Decode",
|
|
585
|
+
input,
|
|
586
|
+
message: e instanceof Error ? e.message : "Invalid input"
|
|
587
|
+
})
|
|
588
|
+
)
|
|
589
|
+
}
|
|
590
|
+
}
|
package/src/encoding/Yaml.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Parses YAML configuration files.
|
|
3
3
|
*
|
|
4
4
|
* Supports YAML 1.2 block and flow collections, indentless sequence values,
|
|
5
|
-
* multiline plain and quoted scalars, block scalars, anchors, and
|
|
5
|
+
* multiline plain and quoted scalars, block scalars, anchors, aliases, and
|
|
6
|
+
* YAML 1.1 merge keys (`<<`).
|
|
6
7
|
*
|
|
7
8
|
* Unlike YAML 1.2, the closing bracket of a multiline flow collection may sit
|
|
8
9
|
* at its parent's indentation.
|
|
@@ -55,6 +56,34 @@ const setProperty = (record: YamlRecord, key: string, value: unknown): void => {
|
|
|
55
56
|
})
|
|
56
57
|
}
|
|
57
58
|
|
|
59
|
+
const isMapping = (value: unknown): value is YamlRecord =>
|
|
60
|
+
typeof value === "object" && value !== null && !Array.isArray(value)
|
|
61
|
+
|
|
62
|
+
// Explicit keys take precedence over merged keys, and earlier merge sources over later ones.
|
|
63
|
+
class MappingBuilder {
|
|
64
|
+
readonly output: YamlRecord = {}
|
|
65
|
+
// Keys added by the merge key, which an explicit key may still override.
|
|
66
|
+
private merged: Set<string> | undefined
|
|
67
|
+
|
|
68
|
+
set(key: string, value: unknown, fail: (message: string) => never): void {
|
|
69
|
+
if (hasOwn.call(this.output, key) && !this.merged?.delete(key)) fail(`Duplicate key '${key}'`)
|
|
70
|
+
setProperty(this.output, key, value)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
merge(value: unknown, fail: (message: string) => never): void {
|
|
74
|
+
if (this.merged !== undefined) fail("Duplicate key '<<'")
|
|
75
|
+
this.merged = new Set()
|
|
76
|
+
for (const source of Array.isArray(value) ? value : [value]) {
|
|
77
|
+
if (!isMapping(source)) fail("Merge key values must be mappings")
|
|
78
|
+
for (const key of Object.keys(source)) {
|
|
79
|
+
if (hasOwn.call(this.output, key)) continue
|
|
80
|
+
setProperty(this.output, key, source[key])
|
|
81
|
+
this.merged.add(key)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
58
87
|
const closingQuote = (input: string, quote: string, start: number): number => {
|
|
59
88
|
for (let index = start; index < input.length; index++) {
|
|
60
89
|
const character = input[index]
|
|
@@ -293,28 +322,31 @@ class FlowParser {
|
|
|
293
322
|
|
|
294
323
|
private parseMapping(): YamlRecord {
|
|
295
324
|
this.expect("{")
|
|
296
|
-
const
|
|
325
|
+
const mapping = new MappingBuilder()
|
|
326
|
+
const fail = (message: string) => this.fail(message)
|
|
297
327
|
this.skipWhitespace()
|
|
298
328
|
if (this.peek() === "}") {
|
|
299
329
|
this.index++
|
|
300
|
-
return output
|
|
330
|
+
return mapping.output
|
|
301
331
|
}
|
|
302
332
|
while (true) {
|
|
333
|
+
this.skipWhitespace()
|
|
334
|
+
const quoted = this.peek() === "\"" || this.peek() === "'"
|
|
303
335
|
const key = this.parseKey()
|
|
304
336
|
this.skipWhitespace()
|
|
305
337
|
this.expect(":")
|
|
306
|
-
if (
|
|
307
|
-
|
|
338
|
+
if (!quoted && key === "<<") mapping.merge(this.parseValue(), fail)
|
|
339
|
+
else mapping.set(key, this.parseValue(), fail)
|
|
308
340
|
this.skipWhitespace()
|
|
309
341
|
if (this.peek() === "}") {
|
|
310
342
|
this.index++
|
|
311
|
-
return output
|
|
343
|
+
return mapping.output
|
|
312
344
|
}
|
|
313
345
|
this.expect(",")
|
|
314
346
|
this.skipWhitespace()
|
|
315
347
|
if (this.peek() === "}") {
|
|
316
348
|
this.index++
|
|
317
|
-
return output
|
|
349
|
+
return mapping.output
|
|
318
350
|
}
|
|
319
351
|
}
|
|
320
352
|
}
|
|
@@ -398,31 +430,32 @@ class YamlParser {
|
|
|
398
430
|
return this.parseNodeValue(line.text, parentIndent)
|
|
399
431
|
}
|
|
400
432
|
|
|
401
|
-
private parseMapping(indent: number,
|
|
433
|
+
private parseMapping(indent: number, mapping = new MappingBuilder()): YamlRecord {
|
|
402
434
|
while (true) {
|
|
403
435
|
this.skipIgnored()
|
|
404
436
|
const line = this.lines[this.index]
|
|
405
|
-
if (line === undefined || line.indent < indent) return output
|
|
437
|
+
if (line === undefined || line.indent < indent) return mapping.output
|
|
406
438
|
if (line.indent > indent) this.fail(line, `Unexpected indentation of ${line.indent} spaces`)
|
|
407
439
|
const separator = mappingSeparator(line.text)
|
|
408
|
-
if (separator === -1) return output
|
|
440
|
+
if (separator === -1) return mapping.output
|
|
409
441
|
this.index++
|
|
410
|
-
this.parseMappingEntry(
|
|
442
|
+
this.parseMappingEntry(mapping, line.text, separator, indent, line)
|
|
411
443
|
}
|
|
412
444
|
}
|
|
413
445
|
|
|
414
446
|
private parseMappingEntry(
|
|
415
|
-
|
|
447
|
+
mapping: MappingBuilder,
|
|
416
448
|
text: string,
|
|
417
449
|
separator: number,
|
|
418
450
|
indent: number,
|
|
419
451
|
line: Line
|
|
420
452
|
): void {
|
|
421
|
-
const
|
|
453
|
+
const rawKey = text.slice(0, separator).trim()
|
|
422
454
|
const rawValue = text.slice(separator + 1).trimStart()
|
|
423
455
|
const value = this.parseNodeValue(rawValue, indent, true)
|
|
424
|
-
|
|
425
|
-
|
|
456
|
+
const fail = (message: string) => this.fail(line, message)
|
|
457
|
+
if (rawKey === "<<") mapping.merge(value, fail)
|
|
458
|
+
else mapping.set(parseKey(rawKey), value, fail)
|
|
426
459
|
}
|
|
427
460
|
|
|
428
461
|
private parseSequence(indent: number): Array<unknown> {
|
|
@@ -440,9 +473,13 @@ class YamlParser {
|
|
|
440
473
|
if (separator === -1) {
|
|
441
474
|
output.push(this.parseNodeValue(item, indent))
|
|
442
475
|
} else {
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
476
|
+
// The mapping is indented to its first key, which may sit more than one space after the dash.
|
|
477
|
+
const keyOffset = line.text.length - item.length
|
|
478
|
+
if (line.text.slice(1, keyOffset).includes("\t")) this.fail(line, "Tabs cannot be used for YAML indentation")
|
|
479
|
+
const mappingIndent = indent + keyOffset
|
|
480
|
+
const mapping = new MappingBuilder()
|
|
481
|
+
this.parseMappingEntry(mapping, item, separator, mappingIndent, line)
|
|
482
|
+
output.push(this.parseMapping(mappingIndent, mapping))
|
|
446
483
|
}
|
|
447
484
|
}
|
|
448
485
|
}
|
|
@@ -668,6 +705,12 @@ class YamlParser {
|
|
|
668
705
|
* The core YAML 1.2 scalar schema is used, so booleans, nulls, and numbers are
|
|
669
706
|
* decoded while date-like values remain strings.
|
|
670
707
|
*
|
|
708
|
+
* YAML 1.1 merge keys are always enabled. An unquoted `<<` key merges a
|
|
709
|
+
* mapping, or a sequence of mappings, into the enclosing mapping. Explicit
|
|
710
|
+
* keys take precedence over merged keys, earlier merge sources over later
|
|
711
|
+
* ones, and a mapping may contain only one merge key. Quote the key (`"<<"`)
|
|
712
|
+
* to keep it as an ordinary key.
|
|
713
|
+
*
|
|
671
714
|
* @stability unstable
|
|
672
715
|
* @category decoding
|
|
673
716
|
* @since 4.0.0
|
package/src/encoding/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ import * as Arr from "../Array.ts"
|
|
|
16
16
|
import type { Brand } from "../Brand.ts"
|
|
17
17
|
import * as Clock from "../Clock.ts"
|
|
18
18
|
import * as Context from "../Context.ts"
|
|
19
|
+
import * as SecureRandom from "../crypto/SecureRandom.ts"
|
|
19
20
|
import * as Data from "../Data.ts"
|
|
20
21
|
import * as DateTime from "../DateTime.ts"
|
|
21
22
|
import * as Effect from "../Effect.ts"
|
|
@@ -250,7 +251,7 @@ export const RemoteId = Schema.Uint8Array.pipe(Schema.brand(RemoteIdTypeId))
|
|
|
250
251
|
* @category unsafe
|
|
251
252
|
* @since 4.0.0
|
|
252
253
|
*/
|
|
253
|
-
export const makeRemoteIdUnsafe = (): RemoteId =>
|
|
254
|
+
export const makeRemoteIdUnsafe = (): RemoteId => SecureRandom.uuidV4Unsafe({ format: "bytes" }) as RemoteId
|
|
254
255
|
|
|
255
256
|
/**
|
|
256
257
|
* Runtime brand identifier used for `EntryId` values.
|
|
@@ -321,7 +322,7 @@ const nextEntryId = (sequence: EntryIdSequence, now: number): EntryId => {
|
|
|
321
322
|
if (sequence.millis > maxEntryIdMillis) {
|
|
322
323
|
throw new RangeError("The entry id sequence has passed the last UUID v7 millisecond")
|
|
323
324
|
}
|
|
324
|
-
const bytes = Uuid.v7Bytes(sequence.millis)
|
|
325
|
+
const bytes = Uuid.v7Bytes(sequence.millis, SecureRandom.randomBytesUnsafe(16))
|
|
325
326
|
// The counter replaces the 12 random `rand_a` bits after the version.
|
|
326
327
|
bytes[6] = 0x70 | (sequence.counter >> 8)
|
|
327
328
|
bytes[7] = sequence.counter & 0xff
|
|
@@ -387,7 +388,7 @@ const maxEntryId = (ids: Iterable<EntryId>): EntryId | undefined => {
|
|
|
387
388
|
*/
|
|
388
389
|
export const makeEntryIdUnsafe = (options: { msecs?: number } = {}): EntryId =>
|
|
389
390
|
options.msecs !== undefined
|
|
390
|
-
? Uuid.v7Bytes(options.msecs) as EntryId
|
|
391
|
+
? Uuid.v7Bytes(options.msecs, SecureRandom.randomBytesUnsafe(16)) as EntryId
|
|
391
392
|
: nextEntryId(processEntryIds, Date.now())
|
|
392
393
|
|
|
393
394
|
// Imported ids further ahead of the local clock than this are logged.
|