effect 4.0.7 → 4.1.1
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 +31 -1
- package/THIRD_PARTY_NOTICES.md +62 -0
- package/dist/BigDecimal.d.ts +139 -7
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +86 -14
- 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/Equal.d.ts +2 -2
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +3 -3
- package/dist/Equal.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/Hash.d.ts +3 -2
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +5 -4
- package/dist/Hash.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +11 -8
- package/dist/Iterable.js.map +1 -1
- 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/Path.d.ts.map +1 -1
- package/dist/Path.js +5 -1
- package/dist/Path.js.map +1 -1
- package/dist/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +61 -10
- 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 +668 -42
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +652 -1
- 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 +18 -2
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +20 -2
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +10 -5
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +8 -5
- 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/McpClient.d.ts +171 -19
- package/dist/ai/McpClient.d.ts.map +1 -1
- package/dist/ai/McpClient.js +277 -66
- package/dist/ai/McpClient.js.map +1 -1
- package/dist/ai/McpSchema.d.ts +108 -0
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +99 -0
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts +744 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +763 -136
- 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/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +20 -11
- package/dist/ai/Prompt.js.map +1 -1
- 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 +5 -7
- 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 +89 -15
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +60 -17
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +25 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +8 -6
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSkills.d.ts +2 -0
- package/dist/ai/internal/mcpSkills.d.ts.map +1 -0
- package/dist/ai/internal/mcpSkills.js +428 -0
- package/dist/ai/internal/mcpSkills.js.map +1 -0
- 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/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +15 -5
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Reply.d.ts +1 -1
- package/dist/cluster/Reply.d.ts.map +1 -1
- package/dist/cluster/Reply.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +93 -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/cluster/internal/entityManager.js +15 -7
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/crypto/Aead.d.ts +323 -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 +236 -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 +324 -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 +341 -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 +390 -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 +278 -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 +449 -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 +80 -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 +171 -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 +29 -5
- 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/Ndjson.d.ts +5 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +6 -5
- package/dist/encoding/Ndjson.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/Sse.d.ts +3 -1
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +5 -3
- package/dist/encoding/Sse.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 +126 -4
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +207 -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 +10 -1
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +45 -22
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +336 -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/EventLogServerUnencrypted.d.ts +17 -0
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +14 -2
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +26 -3
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +63 -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/graphql/GraphQLClient.d.ts +3 -1
- package/dist/graphql/GraphQLClient.d.ts.map +1 -1
- package/dist/graphql/GraphQLClient.js.map +1 -1
- package/dist/graphql/GraphQLClientError.d.ts +14 -9
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +14 -21
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +12 -3
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +4 -1
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- 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 +268 -15
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +140 -7
- 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 +44 -39
- 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/mimeTypes.d.ts +4 -1
- package/dist/http/internal/mimeTypes.d.ts.map +1 -1
- package/dist/http/internal/mimeTypes.js +4 -1
- package/dist/http/internal/mimeTypes.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 +54 -1
- 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/dateTime.js +49 -24
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +35 -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 +808 -0
- package/dist/internal/glob.js.map +1 -0
- package/dist/internal/graphql.js +21 -7
- package/dist/internal/graphql.js.map +1 -1
- package/dist/internal/graphqlHeaders.d.ts +7 -0
- package/dist/internal/graphqlHeaders.d.ts.map +1 -1
- package/dist/internal/graphqlHeaders.js +11 -0
- package/dist/internal/graphqlHeaders.js.map +1 -1
- 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/request.js +29 -42
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.js +7 -8
- package/dist/internal/schema/fromJsonSchemaDocument.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/jose/JoseError.d.ts +285 -0
- package/dist/jose/JoseError.d.ts.map +1 -0
- package/dist/jose/JoseError.js +269 -0
- package/dist/jose/JoseError.js.map +1 -0
- package/dist/jose/Jwe.d.ts +128 -0
- package/dist/jose/Jwe.d.ts.map +1 -0
- package/dist/jose/Jwe.js +134 -0
- package/dist/jose/Jwe.js.map +1 -0
- package/dist/jose/Jwk.d.ts +597 -0
- package/dist/jose/Jwk.d.ts.map +1 -0
- package/dist/jose/Jwk.js +503 -0
- package/dist/jose/Jwk.js.map +1 -0
- package/dist/jose/Jwks.d.ts +236 -0
- package/dist/jose/Jwks.d.ts.map +1 -0
- package/dist/jose/Jwks.js +306 -0
- package/dist/jose/Jwks.js.map +1 -0
- package/dist/jose/Jws.d.ts +177 -0
- package/dist/jose/Jws.d.ts.map +1 -0
- package/dist/jose/Jws.js +183 -0
- package/dist/jose/Jws.js.map +1 -0
- package/dist/jose/Jwt.d.ts +270 -0
- package/dist/jose/Jwt.d.ts.map +1 -0
- package/dist/jose/Jwt.js +293 -0
- package/dist/jose/Jwt.js.map +1 -0
- package/dist/jose/index.d.ts +51 -0
- package/dist/jose/index.d.ts.map +1 -0
- package/dist/jose/index.js +52 -0
- package/dist/jose/index.js.map +1 -0
- package/dist/jose/internal/compact.d.ts +2 -0
- package/dist/jose/internal/compact.d.ts.map +1 -0
- package/dist/jose/internal/compact.js +179 -0
- package/dist/jose/internal/compact.js.map +1 -0
- package/dist/net/Host.d.ts.map +1 -1
- package/dist/net/Host.js +5 -10
- package/dist/net/Host.js.map +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/observability/OtlpSerialization.d.ts +1 -1
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +10 -4
- package/dist/observability/OtlpSerialization.js.map +1 -1
- package/dist/observability/internal/otlpProtobuf.js +3 -3
- package/dist/observability/internal/otlpProtobuf.js.map +1 -1
- package/dist/observability/internal/protobuf.js +6 -0
- package/dist/observability/internal/protobuf.js.map +1 -1
- package/dist/persistence/CircuitBreaker.d.ts +98 -38
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -1
- package/dist/persistence/CircuitBreaker.js +67 -29
- package/dist/persistence/CircuitBreaker.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/persistence/RateLimiter.d.ts +8 -0
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +63 -12
- package/dist/persistence/RateLimiter.js.map +1 -1
- package/dist/persistence/index.d.ts +1 -1
- package/dist/persistence/index.js +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 +17 -7
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +1 -1
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +28 -1
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +78 -27
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +13 -3
- 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 +9 -20
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +20 -53
- 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 +38 -3
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +9 -12
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +61 -9
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +24 -33
- 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/Workflow.d.ts +4 -0
- package/dist/workflow/Workflow.d.ts.map +1 -1
- package/dist/workflow/Workflow.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +5 -0
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/dist/workflow/internal/crypto.js +9 -8
- package/dist/workflow/internal/crypto.js.map +1 -1
- package/package.json +7 -1
- package/src/BigDecimal.ts +173 -16
- 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/Equal.ts +3 -3
- package/src/FileSystem.ts +65 -4
- package/src/Glob.ts +205 -0
- package/src/Hash.ts +5 -4
- package/src/Iterable.ts +8 -5
- package/src/Match.ts +127 -0
- package/src/Path.ts +6 -1
- package/src/Pool.ts +75 -16
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Schedule.ts +26 -3
- package/src/Schema.ts +1191 -63
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaRepresentation.ts +23 -2
- package/src/SchemaTransformation.ts +10 -5
- 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/McpClient.ts +488 -91
- package/src/ai/McpSchema.ts +119 -0
- package/src/ai/McpServer.ts +1525 -319
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Prompt.ts +16 -11
- package/src/ai/Response.ts +2 -22
- package/src/ai/Tool.ts +32 -18
- package/src/ai/index.ts +6 -0
- package/src/ai/internal/mcpCore.ts +243 -56
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +56 -17
- package/src/ai/internal/mcpProtocol.ts +44 -0
- package/src/ai/internal/mcpRuntime.ts +15 -8
- package/src/ai/internal/mcpSkills.ts +480 -0
- 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/ClusterWorkflowEngine.ts +22 -8
- package/src/cluster/Reply.ts +1 -1
- package/src/cluster/Sharding.ts +96 -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/cluster/internal/entityManager.ts +24 -10
- 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 +741 -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 +84 -0
- package/src/crypto/index.ts +78 -0
- package/src/crypto/internal/asymmetric.ts +330 -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 +242 -0
- package/src/crypto/internal/md5.ts +170 -0
- package/src/crypto/internal/webCrypto.ts +150 -0
- package/src/encoding/Base64Url.ts +32 -5
- package/src/encoding/Csv.ts +1298 -0
- package/src/encoding/Hex.ts +3 -2
- package/src/encoding/Ndjson.ts +6 -5
- package/src/encoding/SchemaBinary.ts +40 -4
- package/src/encoding/Sse.ts +5 -3
- 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 +347 -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 +54 -20
- package/src/eventlog/EventLogServerEncrypted.ts +1135 -67
- package/src/eventlog/EventLogServerUnencrypted.ts +19 -2
- package/src/eventlog/EventLogSessionAuth.ts +82 -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/graphql/GraphQLClient.ts +3 -1
- package/src/graphql/GraphQLClientError.ts +15 -22
- package/src/graphql/GraphQLProtocol.ts +12 -3
- package/src/http/Cookies.ts +281 -1
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +299 -33
- 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 +76 -53
- 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/mimeTypes.ts +4 -1
- 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 +106 -15
- package/src/index.ts +6 -6
- package/src/internal/dateTime.ts +54 -24
- package/src/internal/effect.ts +40 -18
- package/src/internal/glob.ts +952 -0
- package/src/internal/graphql.ts +27 -9
- package/src/internal/graphqlHeaders.ts +13 -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/request.ts +51 -58
- package/src/internal/schema/fromJsonSchemaDocument.ts +11 -10
- 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/jose/JoseError.ts +329 -0
- package/src/jose/Jwe.ts +196 -0
- package/src/jose/Jwk.ts +777 -0
- package/src/jose/Jwks.ts +418 -0
- package/src/jose/Jws.ts +312 -0
- package/src/jose/Jwt.ts +493 -0
- package/src/jose/index.ts +58 -0
- package/src/jose/internal/compact.ts +195 -0
- package/src/net/Host.ts +5 -10
- package/src/observability/Otlp.ts +21 -4
- package/src/observability/OtlpResource.ts +9 -1
- package/src/observability/OtlpSerialization.ts +13 -5
- package/src/observability/internal/otlpProtobuf.ts +6 -6
- package/src/observability/internal/protobuf.ts +10 -0
- package/src/persistence/CircuitBreaker.ts +113 -48
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/persistence/RateLimiter.ts +84 -15
- package/src/persistence/index.ts +1 -1
- 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 +20 -9
- package/src/rpc/Rpc.ts +3 -1
- package/src/rpc/RpcClient.ts +94 -38
- package/src/rpc/RpcMessage.ts +13 -3
- 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 +38 -80
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +45 -24
- package/src/sql/Statement.ts +60 -29
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/Workflow.ts +4 -0
- package/src/workflow/WorkflowEngine.ts +5 -0
- 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/Cron.ts
CHANGED
|
@@ -28,6 +28,60 @@ import type { Mutable } from "./Types.ts"
|
|
|
28
28
|
|
|
29
29
|
const TypeId = "~effect/Cron"
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Chooses which occurrences of a repeated wall-clock time a `Cron` schedule
|
|
33
|
+
* includes.
|
|
34
|
+
*
|
|
35
|
+
* **When to use**
|
|
36
|
+
*
|
|
37
|
+
* Use to control how a schedule behaves when clocks fall back, for example at
|
|
38
|
+
* the end of daylight saving time, and a range of local times occurs twice.
|
|
39
|
+
*
|
|
40
|
+
* **Details**
|
|
41
|
+
*
|
|
42
|
+
* Despite the name, the policy applies to every repeated local time, not only
|
|
43
|
+
* those caused by daylight saving time. For example, Antarctica/Casey repeated
|
|
44
|
+
* 00:00-02:59 on 2023-03-09 when its standard offset changed from +11:00 to
|
|
45
|
+
* +08:00.
|
|
46
|
+
*
|
|
47
|
+
* - `"earlier"` (default) includes only the first occurrence, before the
|
|
48
|
+
* offset change.
|
|
49
|
+
* - `"later"` includes only the second occurrence, after the offset change.
|
|
50
|
+
* - `"both"` includes both occurrences, in chronological order.
|
|
51
|
+
*
|
|
52
|
+
* Time zones without repeated times, such as UTC or fixed offsets, behave the
|
|
53
|
+
* same under every policy.
|
|
54
|
+
*
|
|
55
|
+
* **Gotchas**
|
|
56
|
+
*
|
|
57
|
+
* The policy does not apply to local times skipped when clocks move forward. A
|
|
58
|
+
* matching time inside such a gap resolves to the instant after the gap, the
|
|
59
|
+
* same under every policy, and near a gap `next` and `prev` are not guaranteed
|
|
60
|
+
* to return the nearest matching instant.
|
|
61
|
+
*
|
|
62
|
+
* **Example** (Running every occurrence of a repeated hour)
|
|
63
|
+
*
|
|
64
|
+
* ```ts import.meta.vitest
|
|
65
|
+
* import { Cron } from "effect"
|
|
66
|
+
*
|
|
67
|
+
* // Europe/Berlin repeats 02:00-02:59 on 2026-10-25, first at +02:00
|
|
68
|
+
* // (00:30Z) and again at +01:00 (01:30Z)
|
|
69
|
+
* const earlier = Cron.parseUnsafe("30 2 * * *", "Europe/Berlin")
|
|
70
|
+
* const both = Cron.parseUnsafe("30 2 * * *", "Europe/Berlin", { onDstOverlap: "both" })
|
|
71
|
+
*
|
|
72
|
+
* Cron.next(earlier, "2026-10-25T00:30:00Z").toISOString() // => "2026-10-26T01:30:00.000Z"
|
|
73
|
+
* Cron.next(both, "2026-10-25T00:30:00Z").toISOString() // => "2026-10-25T01:30:00.000Z"
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @see {@link make} for setting the policy from explicit field constraints
|
|
77
|
+
* @see {@link parse} for setting the policy when parsing an expression
|
|
78
|
+
*
|
|
79
|
+
* @stability stable
|
|
80
|
+
* @category models
|
|
81
|
+
* @since 4.1.0
|
|
82
|
+
*/
|
|
83
|
+
export type DstOverlapPolicy = "earlier" | "later" | "both"
|
|
84
|
+
|
|
31
85
|
/**
|
|
32
86
|
* Represents a cron schedule with time constraints and timezone information.
|
|
33
87
|
*
|
|
@@ -79,6 +133,7 @@ export interface Cron extends Pipeable, Equal.Equal, Inspectable {
|
|
|
79
133
|
readonly days: ReadonlySet<number>
|
|
80
134
|
readonly months: ReadonlySet<number>
|
|
81
135
|
readonly weekdays: ReadonlySet<number>
|
|
136
|
+
readonly onDstOverlap: DstOverlapPolicy
|
|
82
137
|
/** @internal */
|
|
83
138
|
readonly and: boolean
|
|
84
139
|
/** @internal */
|
|
@@ -128,7 +183,8 @@ function toPojo(cron: Cron): Record<string, unknown> {
|
|
|
128
183
|
hours: Arr.fromIterable(cron.hours),
|
|
129
184
|
days: Arr.fromIterable(cron.days),
|
|
130
185
|
months: Arr.fromIterable(cron.months),
|
|
131
|
-
weekdays: Arr.fromIterable(cron.weekdays)
|
|
186
|
+
weekdays: Arr.fromIterable(cron.weekdays),
|
|
187
|
+
onDstOverlap: cron.onDstOverlap
|
|
132
188
|
}
|
|
133
189
|
return out
|
|
134
190
|
}
|
|
@@ -147,7 +203,8 @@ const CronProto = {
|
|
|
147
203
|
Hash.combine(Hash.array(Arr.fromIterable(this.hours))),
|
|
148
204
|
Hash.combine(Hash.array(Arr.fromIterable(this.days))),
|
|
149
205
|
Hash.combine(Hash.array(Arr.fromIterable(this.months))),
|
|
150
|
-
Hash.combine(Hash.array(Arr.fromIterable(this.weekdays)))
|
|
206
|
+
Hash.combine(Hash.array(Arr.fromIterable(this.weekdays))),
|
|
207
|
+
Hash.combine(Hash.hash(this.onDstOverlap))
|
|
151
208
|
)
|
|
152
209
|
},
|
|
153
210
|
toObject(this: Cron) {
|
|
@@ -223,8 +280,9 @@ export const isCron = (u: unknown): u is Cron => hasProperty(u, TypeId)
|
|
|
223
280
|
* time unit unrestricted. If only days or weekdays are restricted, that field
|
|
224
281
|
* must match. When both are restricted, the default matches either field; set
|
|
225
282
|
* `and: true` to require both fields to match. Weekdays range from `0` (Sunday)
|
|
226
|
-
* to `7` (also Sunday).
|
|
227
|
-
*
|
|
283
|
+
* to `7` (also Sunday). `onDstOverlap` chooses which occurrences of repeated
|
|
284
|
+
* local times are included and defaults to `"earlier"`. The constructor throws a
|
|
285
|
+
* `RangeError` when a field contains a non-integer or out-of-range value.
|
|
228
286
|
*
|
|
229
287
|
* **Example** (Creating schedules from constraints)
|
|
230
288
|
*
|
|
@@ -304,6 +362,7 @@ export const make = (values: {
|
|
|
304
362
|
readonly weekdays: Iterable<number>
|
|
305
363
|
readonly and?: boolean | undefined
|
|
306
364
|
readonly tz?: DateTime.TimeZone | undefined
|
|
365
|
+
readonly onDstOverlap?: DstOverlapPolicy | undefined
|
|
307
366
|
}): Cron => {
|
|
308
367
|
const o: Mutable<Cron> = Object.create(CronProto)
|
|
309
368
|
o.seconds = restrictions.seconds(values.seconds ?? [0])
|
|
@@ -314,6 +373,7 @@ export const make = (values: {
|
|
|
314
373
|
o.weekdays = restrictions.weekdays(values.weekdays)
|
|
315
374
|
o.and = values.and === true
|
|
316
375
|
o.tz = Option.fromUndefinedOr(values.tz)
|
|
376
|
+
o.onDstOverlap = values.onDstOverlap ?? "earlier"
|
|
317
377
|
|
|
318
378
|
const seconds = Array.from(o.seconds)
|
|
319
379
|
const minutes = Array.from(o.minutes)
|
|
@@ -529,6 +589,8 @@ export const isCronParseError = (u: unknown): u is CronParseError => hasProperty
|
|
|
529
589
|
* `CronParseError`. When both the day-of-month and weekday fields are
|
|
530
590
|
* restricted, a date matches if either field matches. When either field starts
|
|
531
591
|
* with `*`, both fields must match; an unrestricted field always matches.
|
|
592
|
+
* `options.onDstOverlap` chooses which occurrences of repeated local times are
|
|
593
|
+
* included and defaults to `"earlier"`.
|
|
532
594
|
*
|
|
533
595
|
* **Example** (Parsing cron expressions)
|
|
534
596
|
*
|
|
@@ -549,7 +611,9 @@ export const isCronParseError = (u: unknown): u is CronParseError => hasProperty
|
|
|
549
611
|
* @category constructors
|
|
550
612
|
* @since 2.0.0
|
|
551
613
|
*/
|
|
552
|
-
export const parse = (cron: string, tz?: DateTime.TimeZone | string
|
|
614
|
+
export const parse = (cron: string, tz?: DateTime.TimeZone | string, options?: {
|
|
615
|
+
readonly onDstOverlap?: DstOverlapPolicy | undefined
|
|
616
|
+
}): Result.Result<Cron, CronParseError> => {
|
|
553
617
|
const segments = cron.trim().split(/\s+/).filter(String.isNonEmpty)
|
|
554
618
|
if (segments.length !== 5 && segments.length !== 6) {
|
|
555
619
|
return Result.fail(new CronParseError({ message: `Invalid number of segments in cron expression`, input: cron }))
|
|
@@ -584,7 +648,8 @@ export const parse = (cron: string, tz?: DateTime.TimeZone | string): Result.Res
|
|
|
584
648
|
days: days.values,
|
|
585
649
|
months: months.values,
|
|
586
650
|
weekdays: weekdays.values,
|
|
587
|
-
and: (days.wildcard || weekdays.wildcard) && days.values.size !== 0 && weekdays.values.size !== 0
|
|
651
|
+
and: (days.wildcard || weekdays.wildcard) && days.values.size !== 0 && weekdays.values.size !== 0,
|
|
652
|
+
onDstOverlap: options?.onDstOverlap
|
|
588
653
|
})
|
|
589
654
|
))
|
|
590
655
|
}
|
|
@@ -618,7 +683,9 @@ export const parse = (cron: string, tz?: DateTime.TimeZone | string): Result.Res
|
|
|
618
683
|
* @category constructors
|
|
619
684
|
* @since 4.0.0
|
|
620
685
|
*/
|
|
621
|
-
export const parseUnsafe = (cron: string, tz?: DateTime.TimeZone | string
|
|
686
|
+
export const parseUnsafe = (cron: string, tz?: DateTime.TimeZone | string, options?: {
|
|
687
|
+
readonly onDstOverlap?: DstOverlapPolicy | undefined
|
|
688
|
+
}): Cron => Result.getOrThrow(parse(cron, tz, options))
|
|
622
689
|
|
|
623
690
|
/**
|
|
624
691
|
* Formats a `Cron` instance as a cron expression.
|
|
@@ -630,8 +697,8 @@ export const parseUnsafe = (cron: string, tz?: DateTime.TimeZone | string): Cron
|
|
|
630
697
|
*
|
|
631
698
|
* **Gotchas**
|
|
632
699
|
*
|
|
633
|
-
* Formatting drops the timezone information
|
|
634
|
-
* days and weekdays. Parsing the result is therefore not guaranteed to produce
|
|
700
|
+
* Formatting drops the timezone information, the `onDstOverlap` policy, and
|
|
701
|
+
* the `and` restriction between days and weekdays. Parsing the result is therefore not guaranteed to produce
|
|
635
702
|
* an equivalent schedule.
|
|
636
703
|
*
|
|
637
704
|
* **Example** (Formatting a cron expression)
|
|
@@ -777,7 +844,9 @@ const daysInMonth = (date: Date): number =>
|
|
|
777
844
|
*
|
|
778
845
|
* Searches for the next date and time when the cron schedule should trigger,
|
|
779
846
|
* starting after the specified date/time or after the current time when no
|
|
780
|
-
* date is provided.
|
|
847
|
+
* date is provided. The result is always strictly after the starting point.
|
|
848
|
+
* Repeated local times are included according to the schedule's
|
|
849
|
+
* `onDstOverlap` policy.
|
|
781
850
|
*
|
|
782
851
|
* **Example** (Finding the next occurrence)
|
|
783
852
|
*
|
|
@@ -812,6 +881,8 @@ export const next = (cron: Cron, now?: DateTime.DateTime.Input): Date => {
|
|
|
812
881
|
* **Details**
|
|
813
882
|
*
|
|
814
883
|
* When no date/time is provided, the search starts from the current time.
|
|
884
|
+
* Repeated local times are included according to the schedule's
|
|
885
|
+
* `onDstOverlap` policy.
|
|
815
886
|
*
|
|
816
887
|
* **Gotchas**
|
|
817
888
|
*
|
|
@@ -829,8 +900,28 @@ export const prev = (cron: Cron, now?: DateTime.DateTime.Input): Date => {
|
|
|
829
900
|
}
|
|
830
901
|
|
|
831
902
|
const stepCron = (cron: Cron, now: DateTime.DateTime.Input | undefined, direction: "next" | "prev"): Date => {
|
|
903
|
+
const start = now ?? new Date()
|
|
904
|
+
if (cron.onDstOverlap !== "both") {
|
|
905
|
+
return searchCron(cron, start, direction, cron.onDstOverlap)
|
|
906
|
+
}
|
|
907
|
+
// Both occurrences are eligible, so the result is the nearest of the two
|
|
908
|
+
// single-occurrence searches in the search direction.
|
|
909
|
+
const earlier = searchCron(cron, start, direction, "earlier")
|
|
910
|
+
const later = searchCron(cron, start, direction, "later")
|
|
911
|
+
if (direction === "next") {
|
|
912
|
+
return earlier <= later ? earlier : later
|
|
913
|
+
}
|
|
914
|
+
return earlier >= later ? earlier : later
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
const searchCron = (
|
|
918
|
+
cron: Cron,
|
|
919
|
+
now: DateTime.DateTime.Input,
|
|
920
|
+
direction: "next" | "prev",
|
|
921
|
+
onDstOverlap: "earlier" | "later"
|
|
922
|
+
): Date => {
|
|
832
923
|
const tz = Option.getOrUndefined(cron.tz)
|
|
833
|
-
const zoned = dateTime.makeZonedUnsafe(now
|
|
924
|
+
const zoned = dateTime.makeZonedUnsafe(now, {
|
|
834
925
|
timeZone: tz
|
|
835
926
|
})
|
|
836
927
|
|
|
@@ -844,28 +935,81 @@ const stepCron = (cron: Cron, now: DateTime.DateTime.Input | undefined, directio
|
|
|
844
935
|
(next: number, current: number) => next > current
|
|
845
936
|
|
|
846
937
|
const utc = tz !== undefined && dateTime.isTimeZoneNamed(tz) && tz.id === "UTC"
|
|
847
|
-
|
|
938
|
+
// Going backward, a candidate inside a gap is left in place: it resolves to
|
|
939
|
+
// the instant after the gap, and the range check below rejects it when that
|
|
940
|
+
// instant is not before the input.
|
|
941
|
+
const adjustDst = utc || reverse ? constVoid : (current: Date) => {
|
|
848
942
|
const adjusted = dateTime.makeZonedUnsafe(current, {
|
|
849
943
|
timeZone: zoned.zone,
|
|
850
|
-
adjustForTimeZone: true
|
|
851
|
-
disambiguation: reverse ? "later" : undefined
|
|
944
|
+
adjustForTimeZone: true
|
|
852
945
|
}).pipe(dateTime.toDate)
|
|
853
946
|
|
|
854
947
|
const drift = current.getTime() - adjusted.getTime()
|
|
855
|
-
if (
|
|
856
|
-
current.setTime(
|
|
948
|
+
if (drift > 0) {
|
|
949
|
+
current.setTime(current.getTime() + drift)
|
|
857
950
|
}
|
|
858
951
|
}
|
|
859
952
|
|
|
860
|
-
// Repeated wall times resolve to
|
|
861
|
-
//
|
|
862
|
-
const
|
|
863
|
-
|
|
953
|
+
// Repeated wall times resolve to the occurrence chosen by the policy. Gaps
|
|
954
|
+
// resolve to the instant after the gap under either disambiguation.
|
|
955
|
+
const disambiguation = onDstOverlap === "later" ? "later" : "compatible"
|
|
956
|
+
const resolve = (wallMillis: number) =>
|
|
957
|
+
dateTime.makeZonedUnsafe(wallMillis, {
|
|
864
958
|
timeZone: zoned.zone,
|
|
865
|
-
adjustForTimeZone: true
|
|
866
|
-
|
|
959
|
+
adjustForTimeZone: true,
|
|
960
|
+
disambiguation
|
|
961
|
+
}).epochMilliseconds
|
|
962
|
+
|
|
963
|
+
// Inside a fold, wall-clock order differs from instant order, so a candidate
|
|
964
|
+
// can resolve to an instant on the wrong side of the input.
|
|
965
|
+
const isOutOfRange = utc ? constFalse : reverse ?
|
|
966
|
+
(wallMillis: number) => resolve(wallMillis) >= zoned.epochMilliseconds :
|
|
967
|
+
(wallMillis: number) => resolve(wallMillis) <= zoned.epochMilliseconds
|
|
968
|
+
|
|
969
|
+
// A fold near the input shows as a larger offset a day before it than a day
|
|
970
|
+
// after it (DateTime disambiguation assumes the same single transition).
|
|
971
|
+
// Inside a fold the resolved instant moves in the same direction as the wall
|
|
972
|
+
// time, so the rejected candidates form one interval no longer than the
|
|
973
|
+
// fold: when the wall time one fold length ahead is in range, binary search
|
|
974
|
+
// for the first second in range instead of stepping through the interval.
|
|
975
|
+
// Gaps break that ordering, so they keep stepping one second at a time.
|
|
976
|
+
let foldSeconds: number | undefined
|
|
977
|
+
const skipOutOfRange = (current: Date) => {
|
|
978
|
+
if (foldSeconds === undefined) {
|
|
979
|
+
const offsetAt = (millis: number) =>
|
|
980
|
+
dateTime.zonedOffset(dateTime.makeZonedUnsafe(millis, { timeZone: zoned.zone }))
|
|
981
|
+
foldSeconds = Math.floor(
|
|
982
|
+
(offsetAt(zoned.epochMilliseconds - 86_400_000) - offsetAt(zoned.epochMilliseconds + 86_400_000)) / 1000
|
|
983
|
+
)
|
|
984
|
+
}
|
|
985
|
+
const after = (seconds: number) => current.getTime() + tick * seconds * 1000
|
|
986
|
+
let outOfRange = 0
|
|
987
|
+
let inRange = 1
|
|
988
|
+
if (foldSeconds > 0 && !isOutOfRange(after(foldSeconds))) {
|
|
989
|
+
inRange = foldSeconds
|
|
990
|
+
while (inRange - outOfRange > 1) {
|
|
991
|
+
const mid = outOfRange + Math.floor((inRange - outOfRange) / 2)
|
|
992
|
+
if (isOutOfRange(after(mid))) {
|
|
993
|
+
outOfRange = mid
|
|
994
|
+
} else {
|
|
995
|
+
inRange = mid
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
current.setTime(after(inRange))
|
|
1000
|
+
}
|
|
867
1001
|
|
|
868
1002
|
const result = dateTime.mutate(zoned, (current) => {
|
|
1003
|
+
// When the input is in the occurrence the policy excludes, eligible
|
|
1004
|
+
// instants of the same fold can lie behind its wall time in the search
|
|
1005
|
+
// direction. Start from the wall time of the input under the policy's
|
|
1006
|
+
// offset so they are visited; candidates that resolve on the wrong side
|
|
1007
|
+
// of the input are skipped below.
|
|
1008
|
+
const shift = utc ? 0 : zoned.epochMilliseconds - resolve(current.getTime())
|
|
1009
|
+
if (reverse ? shift > 0 : shift < 0) {
|
|
1010
|
+
current.setTime(current.getTime() + shift)
|
|
1011
|
+
}
|
|
1012
|
+
|
|
869
1013
|
// Start from the nearest whole second strictly past the input in the search
|
|
870
1014
|
// direction. Going backward, a fractional input already has one.
|
|
871
1015
|
const offset = reverse && current.getUTCMilliseconds() > 0 ? 0 : tick
|
|
@@ -1011,8 +1155,8 @@ const stepCron = (cron: Cron, now: DateTime.DateTime.Input | undefined, directio
|
|
|
1011
1155
|
}
|
|
1012
1156
|
}
|
|
1013
1157
|
|
|
1014
|
-
if (
|
|
1015
|
-
|
|
1158
|
+
if (isOutOfRange(current.getTime())) {
|
|
1159
|
+
skipOutOfRange(current)
|
|
1016
1160
|
i = -1 // skipped fold candidates do not count against the search budget
|
|
1017
1161
|
continue
|
|
1018
1162
|
}
|
|
@@ -1021,7 +1165,7 @@ const stepCron = (cron: Cron, now: DateTime.DateTime.Input | undefined, directio
|
|
|
1021
1165
|
}
|
|
1022
1166
|
|
|
1023
1167
|
throw new Error("Unable to find cron date")
|
|
1024
|
-
})
|
|
1168
|
+
}, { disambiguation })
|
|
1025
1169
|
|
|
1026
1170
|
return dateTime.toDateUtc(result)
|
|
1027
1171
|
}
|
|
@@ -1084,7 +1228,8 @@ export const sequence = function*(cron: Cron, now?: DateTime.DateTime.Input): It
|
|
|
1084
1228
|
* **Details**
|
|
1085
1229
|
*
|
|
1086
1230
|
* This comparison checks the optional timezone, the `and` day-matching mode,
|
|
1087
|
-
* seconds, minutes, hours, days, months, and
|
|
1231
|
+
* the `onDstOverlap` policy, seconds, minutes, hours, days, months, and
|
|
1232
|
+
* weekdays.
|
|
1088
1233
|
*
|
|
1089
1234
|
* **Example** (Comparing schedules with equivalence)
|
|
1090
1235
|
*
|
|
@@ -1119,6 +1264,7 @@ export const sequence = function*(cron: Cron, now?: DateTime.DateTime.Input): It
|
|
|
1119
1264
|
export const Equivalence: Equ.Equivalence<Cron> = Equ.make((self, that) =>
|
|
1120
1265
|
Equal.equals(self.tz, that.tz) &&
|
|
1121
1266
|
self.and === that.and &&
|
|
1267
|
+
self.onDstOverlap === that.onDstOverlap &&
|
|
1122
1268
|
restrictionsEquals(self.seconds, that.seconds) &&
|
|
1123
1269
|
restrictionsEquals(self.minutes, that.minutes) &&
|
|
1124
1270
|
restrictionsEquals(self.hours, that.hours) &&
|
|
@@ -1143,7 +1289,8 @@ const restrictionsEquals = (self: ReadonlySet<number>, that: ReadonlySet<number>
|
|
|
1143
1289
|
* **Details**
|
|
1144
1290
|
*
|
|
1145
1291
|
* The comparison checks the optional timezone, the `and` day-matching mode,
|
|
1146
|
-
* seconds, minutes, hours, days, months, and
|
|
1292
|
+
* the `onDstOverlap` policy, seconds, minutes, hours, days, months, and
|
|
1293
|
+
* weekdays.
|
|
1147
1294
|
*
|
|
1148
1295
|
* **Example** (Checking schedule equality)
|
|
1149
1296
|
*
|
|
@@ -1189,7 +1336,8 @@ export const equals: {
|
|
|
1189
1336
|
* **Details**
|
|
1190
1337
|
*
|
|
1191
1338
|
* The comparison checks the optional timezone, the `and` day-matching mode,
|
|
1192
|
-
* seconds, minutes, hours, days, months, and
|
|
1339
|
+
* the `onDstOverlap` policy, seconds, minutes, hours, days, months, and
|
|
1340
|
+
* weekdays.
|
|
1193
1341
|
*
|
|
1194
1342
|
* **Example** (Checking schedule equality)
|
|
1195
1343
|
*
|
|
@@ -1235,7 +1383,8 @@ export const equals: {
|
|
|
1235
1383
|
* **Details**
|
|
1236
1384
|
*
|
|
1237
1385
|
* The comparison checks the optional timezone, the `and` day-matching mode,
|
|
1238
|
-
* seconds, minutes, hours, days, months, and
|
|
1386
|
+
* the `onDstOverlap` policy, seconds, minutes, hours, days, months, and
|
|
1387
|
+
* weekdays.
|
|
1239
1388
|
*
|
|
1240
1389
|
* **Example** (Checking schedule equality)
|
|
1241
1390
|
*
|
package/src/Duration.ts
CHANGED
|
@@ -848,6 +848,30 @@ export const days = (days: number): Duration => make(days * 86_400_000)
|
|
|
848
848
|
*/
|
|
849
849
|
export const weeks = (weeks: number): Duration => make(weeks * 604_800_000)
|
|
850
850
|
|
|
851
|
+
/**
|
|
852
|
+
* Converts a Duration to microseconds.
|
|
853
|
+
*
|
|
854
|
+
* **Example** (Converting durations to microseconds)
|
|
855
|
+
*
|
|
856
|
+
* ```ts import.meta.vitest
|
|
857
|
+
* import { Duration } from "effect"
|
|
858
|
+
*
|
|
859
|
+
* Duration.toMicros(Duration.millis(5)) // => 5000
|
|
860
|
+
* Duration.toMicros(Duration.nanos(123n)) // => 0.123
|
|
861
|
+
* ```
|
|
862
|
+
*
|
|
863
|
+
* @stability stable
|
|
864
|
+
* @category getters
|
|
865
|
+
* @since 4.1.0
|
|
866
|
+
*/
|
|
867
|
+
export const toMicros = (self: Input): number =>
|
|
868
|
+
match(fromInputUnsafe(self), {
|
|
869
|
+
onMillis: (millis) => millis * 1_000,
|
|
870
|
+
onNanos: (nanos) => nanosToUnit(nanos, 1_000),
|
|
871
|
+
onInfinity: () => Infinity,
|
|
872
|
+
onNegativeInfinity: () => -Infinity
|
|
873
|
+
})
|
|
874
|
+
|
|
851
875
|
/**
|
|
852
876
|
* Converts a Duration to milliseconds.
|
|
853
877
|
*
|
|
@@ -2534,6 +2558,122 @@ export const format = (self: Duration): string => {
|
|
|
2534
2558
|
return pieces.join(" ")
|
|
2535
2559
|
}
|
|
2536
2560
|
|
|
2561
|
+
/**
|
|
2562
|
+
* Formats a `Duration` as an ISO 8601 duration string.
|
|
2563
|
+
*
|
|
2564
|
+
* **Details**
|
|
2565
|
+
*
|
|
2566
|
+
* The duration is balanced into days (24 hours), hours, minutes and seconds,
|
|
2567
|
+
* with up to nine fractional second digits. Weeks, months and years are never
|
|
2568
|
+
* produced. Negative durations get a leading `-`, zero is `"PT0S"` and
|
|
2569
|
+
* infinite durations return `Option.none()`.
|
|
2570
|
+
*
|
|
2571
|
+
* **Example** (Formatting durations as ISO 8601)
|
|
2572
|
+
*
|
|
2573
|
+
* ```ts import.meta.vitest
|
|
2574
|
+
* import { Duration, Option } from "effect"
|
|
2575
|
+
*
|
|
2576
|
+
* Duration.formatIso(Duration.minutes(90)) // => Option.some("PT1H30M")
|
|
2577
|
+
* Duration.formatIso(Duration.millis(-1500)) // => Option.some("-PT1.5S")
|
|
2578
|
+
* Duration.formatIso(Duration.hours(26)) // => Option.some("P1DT2H")
|
|
2579
|
+
* Duration.formatIso(Duration.infinity) // => Option.none()
|
|
2580
|
+
* ```
|
|
2581
|
+
*
|
|
2582
|
+
* @see {@link fromIso} for parsing ISO 8601 duration strings
|
|
2583
|
+
*
|
|
2584
|
+
* @stability stable
|
|
2585
|
+
* @category converting
|
|
2586
|
+
* @since 4.1.0
|
|
2587
|
+
*/
|
|
2588
|
+
export const formatIso = (self: Duration): Option.Option<string> => {
|
|
2589
|
+
if (!isFinite(self)) {
|
|
2590
|
+
return Option.none()
|
|
2591
|
+
}
|
|
2592
|
+
const n = toNanosUnsafe(self)
|
|
2593
|
+
const a = n < bigint0 ? -n : n
|
|
2594
|
+
const days = a / bigintNanosPerDay
|
|
2595
|
+
const hours = a % bigintNanosPerDay / bigintNanosPerHour
|
|
2596
|
+
const minutes = a % bigintNanosPerHour / bigintNanosPerMinute
|
|
2597
|
+
const seconds = a % bigintNanosPerMinute / bigint1e9
|
|
2598
|
+
const fraction = a % bigint1e9
|
|
2599
|
+
|
|
2600
|
+
let time = ""
|
|
2601
|
+
if (hours !== bigint0) time += `${hours}H`
|
|
2602
|
+
if (minutes !== bigint0) time += `${minutes}M`
|
|
2603
|
+
if (fraction !== bigint0) {
|
|
2604
|
+
time += `${seconds}.${fraction.toString().padStart(9, "0").replace(/0+$/, "")}S`
|
|
2605
|
+
} else if (seconds !== bigint0) {
|
|
2606
|
+
time += `${seconds}S`
|
|
2607
|
+
}
|
|
2608
|
+
|
|
2609
|
+
let out = n < bigint0 ? "-P" : "P"
|
|
2610
|
+
if (days !== bigint0) out += `${days}D`
|
|
2611
|
+
if (time !== "") out += `T${time}`
|
|
2612
|
+
return Option.some(out === "P" ? "PT0S" : out)
|
|
2613
|
+
}
|
|
2614
|
+
|
|
2615
|
+
const DURATION_ISO_REGEXP =
|
|
2616
|
+
/^([+-])?P(?!$)(?:(\d+)W)?(?:(\d+)D)?(?:T(?!$)(?:(\d+)(?:[.,](\d{1,9}))?H)?(?:(\d+)(?:[.,](\d{1,9}))?M)?(?:(\d+)(?:[.,](\d{1,9}))?S)?)?$/
|
|
2617
|
+
|
|
2618
|
+
// `scale` is the number of nanoseconds in one unit
|
|
2619
|
+
const parseIsoComponent = (whole: string | undefined, fraction: string | undefined, scale: bigint): bigint =>
|
|
2620
|
+
(whole === undefined ? bigint0 : BigInt(whole) * scale) +
|
|
2621
|
+
(fraction === undefined ? bigint0 : BigInt(fraction.padEnd(9, "0")) * (scale / bigint1e9))
|
|
2622
|
+
|
|
2623
|
+
/**
|
|
2624
|
+
* Parses an ISO 8601 duration string into a `Duration`.
|
|
2625
|
+
*
|
|
2626
|
+
* **Details**
|
|
2627
|
+
*
|
|
2628
|
+
* Accepts an optional `+` or `-` sign followed by weeks (`W`), days (`D`),
|
|
2629
|
+
* hours (`H`), minutes (`M`) and seconds (`S`). A day is 24 hours and a week
|
|
2630
|
+
* is 7 days. Only the last time component may have a fraction, of up to nine
|
|
2631
|
+
* digits, separated by `.` or `,`.
|
|
2632
|
+
*
|
|
2633
|
+
* **Gotchas**
|
|
2634
|
+
*
|
|
2635
|
+
* Years (`Y`) and months (`M` before `T`) are rejected because they have no
|
|
2636
|
+
* fixed length. Fractional weeks and days are rejected.
|
|
2637
|
+
*
|
|
2638
|
+
* **Example** (Parsing ISO 8601 durations)
|
|
2639
|
+
*
|
|
2640
|
+
* ```ts import.meta.vitest
|
|
2641
|
+
* import { Duration, Option } from "effect"
|
|
2642
|
+
*
|
|
2643
|
+
* Duration.fromIso("PT1H30M") // => Option.some(Duration.minutes(90))
|
|
2644
|
+
* Duration.fromIso("-PT1.5S") // => Option.some(Duration.millis(-1500))
|
|
2645
|
+
* Duration.fromIso("P1W2D") // => Option.some(Duration.days(9))
|
|
2646
|
+
* Duration.fromIso("P1M") // => Option.none()
|
|
2647
|
+
* ```
|
|
2648
|
+
*
|
|
2649
|
+
* @see {@link formatIso} for formatting a `Duration` as an ISO 8601 string
|
|
2650
|
+
*
|
|
2651
|
+
* @stability stable
|
|
2652
|
+
* @category constructors
|
|
2653
|
+
* @since 4.1.0
|
|
2654
|
+
*/
|
|
2655
|
+
export const fromIso = (input: string): Option.Option<Duration> => {
|
|
2656
|
+
const match = DURATION_ISO_REGEXP.exec(input)
|
|
2657
|
+
if (match === null) {
|
|
2658
|
+
return Option.none()
|
|
2659
|
+
}
|
|
2660
|
+
const [, sign, w, d, h, hf, m, mf, s, sf] = match
|
|
2661
|
+
// a fraction is only allowed on the last time component
|
|
2662
|
+
if ((hf !== undefined && (m !== undefined || s !== undefined)) || (mf !== undefined && s !== undefined)) {
|
|
2663
|
+
return Option.none()
|
|
2664
|
+
}
|
|
2665
|
+
const total = parseIsoComponent(w, undefined, bigintNanosPerWeek) +
|
|
2666
|
+
parseIsoComponent(d, undefined, bigintNanosPerDay) +
|
|
2667
|
+
parseIsoComponent(h, hf, bigintNanosPerHour) +
|
|
2668
|
+
parseIsoComponent(m, mf, bigintNanosPerMinute) +
|
|
2669
|
+
parseIsoComponent(s, sf, bigint1e9)
|
|
2670
|
+
const signed = sign === "-" ? -total : total
|
|
2671
|
+
const ms = Number(signed / bigint1e6)
|
|
2672
|
+
return Option.some(
|
|
2673
|
+
signed % bigint1e6 === bigint0 && Number.isSafeInteger(ms) ? millis(ms) : nanos(signed)
|
|
2674
|
+
)
|
|
2675
|
+
}
|
|
2676
|
+
|
|
2537
2677
|
/**
|
|
2538
2678
|
* Reducer for summing `Duration`s.
|
|
2539
2679
|
*
|