effect 4.0.6 → 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/Arbitrary.d.ts +10 -2
- package/dist/Arbitrary.d.ts.map +1 -1
- package/dist/Arbitrary.js +2 -1
- package/dist/Arbitrary.js.map +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 +30 -9
- 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/Data.d.ts +54 -235
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.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 +165 -8
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +12 -2
- package/dist/Effect.js.map +1 -1
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +8 -1
- package/dist/Equal.js.map +1 -1
- package/dist/Exit.d.ts +3 -3
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.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/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +27 -13
- package/dist/Formatter.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.map +1 -1
- package/dist/Hash.js +4 -1
- package/dist/Hash.js.map +1 -1
- package/dist/JsonPatch.js +4 -0
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +13 -40
- package/dist/JsonSchema.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/Metric.d.ts +3 -3
- package/dist/MutableList.d.ts +5 -2
- package/dist/MutableList.d.ts.map +1 -1
- package/dist/MutableList.js +7 -5
- package/dist/MutableList.js.map +1 -1
- package/dist/MutableRef.d.ts.map +1 -1
- package/dist/MutableRef.js +7 -0
- package/dist/MutableRef.js.map +1 -1
- package/dist/PartitionedSemaphore.d.ts +2 -1
- package/dist/PartitionedSemaphore.d.ts.map +1 -1
- package/dist/PartitionedSemaphore.js +22 -12
- package/dist/PartitionedSemaphore.js.map +1 -1
- package/dist/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +136 -36
- package/dist/Pool.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +5 -6
- package/dist/PubSub.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/Ref.d.ts.map +1 -1
- package/dist/Ref.js +8 -0
- package/dist/Ref.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +8 -3
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +690 -49
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +687 -28
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +4 -2
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +14 -17
- package/dist/SchemaAST.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/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +48 -22
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +33 -10
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +39 -13
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +12 -4
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +15 -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 +94 -35
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +7 -2
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +31 -10
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +3 -0
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +3 -0
- package/dist/String.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/Tracer.d.ts +11 -1
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +6 -1
- package/dist/Tracer.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/LanguageModel.d.ts.map +1 -1
- package/dist/ai/LanguageModel.js +9 -0
- package/dist/ai/LanguageModel.js.map +1 -1
- package/dist/ai/McpSchema.d.ts +110 -110
- package/dist/ai/McpSchema.d.ts.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 +583 -131
- 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 +52 -0
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +38 -0
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +17 -28
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +5 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +43 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js +5 -2
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/Toolkit.d.ts.map +1 -1
- package/dist/ai/Toolkit.js +8 -1
- package/dist/ai/Toolkit.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 +21 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +7 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliError.d.ts +78 -0
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +65 -3
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +220 -7
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +156 -43
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +47 -16
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +67 -29
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +58 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js +49 -9
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +122 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +42 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +15 -7
- package/dist/cli/GlobalFlag.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 +15 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +23 -2
- 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/TerminalCapabilities.d.ts +3 -2
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
- package/dist/cli/TerminalCapabilities.js +3 -1
- package/dist/cli/TerminalCapabilities.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +73 -27
- package/dist/cli/internal/completions/bash.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 +45 -10
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +23 -45
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +6 -7
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +151 -49
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +76 -0
- 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/Snowflake.d.ts.map +1 -1
- package/dist/cluster/Snowflake.js +3 -7
- package/dist/cluster/Snowflake.js.map +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 +109 -46
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +54 -20
- package/dist/cluster/internal/entityManager.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/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/devtools/DevToolsClient.js +2 -0
- package/dist/devtools/DevToolsClient.js.map +1 -1
- package/dist/encoding/Base64.js +36 -0
- package/dist/encoding/Base64.js.map +1 -1
- 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/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +3 -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 +124 -31
- 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.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +47 -27
- 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/conflicts.d.ts +0 -1
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
- package/dist/eventlog/internal/conflicts.js +0 -3
- package/dist/eventlog/internal/conflicts.js.map +1 -1
- 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 +153 -10
- 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 +502 -8
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +296 -12
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientError.d.ts +8 -1
- package/dist/http/HttpClientError.d.ts.map +1 -1
- package/dist/http/HttpClientError.js +37 -1
- package/dist/http/HttpClientError.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 +3 -4
- 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/HttpMiddleware.d.ts +1 -1
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +14 -16
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +2 -1
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerError.js +2 -2
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +11 -3
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +77 -25
- 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/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +48 -21
- package/dist/http/HttpStaticServer.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/MultipartParser/internal/contentType.js +3 -3
- 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/UrlParams.d.ts +3 -1
- package/dist/http/UrlParams.d.ts.map +1 -1
- package/dist/http/UrlParams.js +4 -2
- package/dist/http/UrlParams.js.map +1 -1
- 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/compression.js +4 -5
- package/dist/http/internal/compression.js.map +1 -1
- package/dist/http/internal/decompression.js +6 -2
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/httpBody.js +8 -1
- package/dist/http/internal/httpBody.js.map +1 -1
- package/dist/http/internal/urlParams.js +33 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApi.d.ts +3 -6
- package/dist/http-api/HttpApi.d.ts.map +1 -1
- package/dist/http-api/HttpApi.js +3 -6
- package/dist/http-api/HttpApi.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +43 -13
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +140 -7
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +193 -44
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +123 -32
- 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 +142 -33
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +123 -59
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/http-api/HttpApiTest.d.ts.map +1 -1
- package/dist/http-api/HttpApiTest.js +3 -2
- package/dist/http-api/HttpApiTest.js.map +1 -1
- package/dist/http-api/OpenApi.d.ts.map +1 -1
- package/dist/http-api/OpenApi.js +25 -16
- package/dist/http-api/OpenApi.js.map +1 -1
- package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
- package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
- package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
- package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
- 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/arbitrary/runner.d.ts.map +1 -1
- package/dist/internal/arbitrary/runner.js +120 -44
- package/dist/internal/arbitrary/runner.js.map +1 -1
- package/dist/internal/core.js +2 -0
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/effect.js +46 -27
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/equal.js +14 -0
- package/dist/internal/equal.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/jsonSchema.d.ts +2 -0
- package/dist/internal/jsonSchema.d.ts.map +1 -0
- package/dist/internal/jsonSchema.js +28 -0
- package/dist/internal/jsonSchema.js.map +1 -0
- package/dist/internal/matcher.js +11 -1
- 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/compilerRegistry.js +4 -1
- package/dist/internal/schema/compilerRegistry.js.map +1 -1
- package/dist/internal/schema/content.d.ts +2 -0
- package/dist/internal/schema/content.d.ts.map +1 -0
- package/dist/internal/schema/content.js +13 -0
- package/dist/internal/schema/content.js.map +1 -0
- package/dist/internal/schema/fromJsonSchemaDocument.js +173 -185
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/fromRepresentation.js +2 -1
- package/dist/internal/schema/fromRepresentation.js.map +1 -1
- package/dist/internal/schema/standardSchema.js +8 -2
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +9 -6
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +21 -24
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/toRepresentation.js +107 -129
- package/dist/internal/schema/toRepresentation.js.map +1 -1
- package/dist/internal/sql.d.ts +2 -0
- package/dist/internal/sql.d.ts.map +1 -0
- package/dist/internal/sql.js +13 -0
- package/dist/internal/sql.js.map +1 -0
- 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/OtlpProxy.d.ts +154 -0
- package/dist/observability/OtlpProxy.d.ts.map +1 -0
- package/dist/observability/OtlpProxy.js +235 -0
- package/dist/observability/OtlpProxy.js.map +1 -0
- 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/OtlpTracer.d.ts.map +1 -1
- package/dist/observability/OtlpTracer.js +4 -0
- package/dist/observability/OtlpTracer.js.map +1 -1
- package/dist/observability/index.d.ts +5 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +5 -0
- package/dist/observability/index.js.map +1 -1
- package/dist/persistence/CircuitBreaker.d.ts +897 -0
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
- package/dist/persistence/CircuitBreaker.js +1165 -0
- package/dist/persistence/CircuitBreaker.js.map +1 -0
- 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/Redis.d.ts +78 -2
- package/dist/persistence/Redis.d.ts.map +1 -1
- package/dist/persistence/Redis.js +62 -7
- package/dist/persistence/Redis.js.map +1 -1
- package/dist/persistence/index.d.ts +5 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +5 -0
- package/dist/persistence/index.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +237 -71
- 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 +35 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js +5 -2
- 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/AsyncResult.d.ts +1 -1
- package/dist/reactivity/AsyncResult.d.ts.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 +59 -24
- 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 +14 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +26 -8
- 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 -56
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/rpc/RpcTest.d.ts +1 -0
- package/dist/rpc/RpcTest.d.ts.map +1 -1
- package/dist/rpc/RpcTest.js +1 -0
- package/dist/rpc/RpcTest.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 +2 -20
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +13 -55
- 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 +9 -4
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +13 -10
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +4 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +18 -4
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +27 -6
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +21 -15
- 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/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +21 -2
- package/dist/workflow/DurableDeferred.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/Arbitrary.ts +10 -2
- package/src/BigDecimal.ts +3 -0
- package/src/Channel.ts +64 -29
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Data.ts +60 -265
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +915 -86
- package/src/Equal.ts +8 -1
- package/src/Exit.ts +3 -3
- package/src/FileSystem.ts +65 -4
- package/src/Formatter.ts +28 -13
- package/src/Glob.ts +205 -0
- package/src/Hash.ts +4 -1
- package/src/JsonPatch.ts +4 -0
- package/src/JsonSchema.ts +12 -40
- package/src/Match.ts +127 -0
- package/src/Metric.ts +3 -3
- package/src/MutableList.ts +7 -5
- package/src/MutableRef.ts +8 -1
- package/src/PartitionedSemaphore.ts +24 -13
- package/src/Pool.ts +182 -52
- package/src/PubSub.ts +5 -6
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Ref.ts +8 -0
- package/src/Schedule.ts +27 -4
- package/src/Schema.ts +1237 -87
- package/src/SchemaAST.ts +20 -20
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaParser.ts +51 -18
- package/src/SchemaRepresentation.ts +50 -34
- package/src/SchemaTransformation.ts +17 -5
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +208 -40
- package/src/Sink.ts +15 -2
- package/src/Stream.ts +48 -22
- package/src/String.ts +3 -0
- package/src/Terminal.ts +19 -1
- package/src/Tracer.ts +15 -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/LanguageModel.ts +9 -0
- package/src/ai/McpServer.ts +1283 -299
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Prompt.ts +65 -0
- package/src/ai/Response.ts +36 -31
- package/src/ai/Tool.ts +65 -10
- package/src/ai/Toolkit.ts +4 -1
- 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 +21 -0
- package/src/cli/CliError.ts +90 -3
- package/src/cli/CliOutput.ts +300 -55
- package/src/cli/Command.ts +76 -41
- package/src/cli/Completions.ts +51 -0
- package/src/cli/Flag.ts +122 -0
- package/src/cli/GlobalFlag.ts +6 -7
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +35 -6
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/TerminalCapabilities.ts +6 -3
- package/src/cli/internal/completions/bash.ts +79 -29
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/ClusterWorkflowEngine.ts +46 -16
- package/src/cluster/MessageStorage.ts +19 -14
- package/src/cluster/Sharding.ts +176 -47
- package/src/cluster/ShardingConfig.ts +43 -0
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/Snowflake.ts +3 -7
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +143 -70
- package/src/cluster/internal/entityManager.ts +75 -22
- 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/devtools/DevToolsClient.ts +2 -0
- package/src/encoding/Base64.ts +38 -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/Sse.ts +4 -3
- package/src/encoding/Toml.ts +117 -35
- 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 +68 -45
- 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/conflicts.ts +0 -4
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/http/Cookies.ts +291 -12
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +636 -29
- package/src/http/HttpClientError.ts +35 -1
- package/src/http/HttpClientRequest.ts +21 -10
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- package/src/http/HttpMiddleware.ts +15 -18
- package/src/http/HttpRouter.ts +2 -1
- package/src/http/HttpServerError.ts +2 -2
- package/src/http/HttpServerRequest.ts +101 -30
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpStaticServer.ts +51 -22
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/MultipartParser/internal/contentType.ts +3 -3
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/UrlParams.ts +6 -1
- package/src/http/index.ts +6 -0
- package/src/http/internal/compression.ts +4 -5
- package/src/http/internal/decompression.ts +10 -4
- package/src/http/internal/httpBody.ts +10 -2
- package/src/http/internal/urlParams.ts +37 -0
- package/src/http-api/HttpApi.ts +3 -6
- package/src/http-api/HttpApiBuilder.ts +61 -19
- package/src/http-api/HttpApiClient.ts +284 -72
- package/src/http-api/HttpApiEndpoint.ts +135 -35
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +236 -52
- package/src/http-api/HttpApiTest.ts +3 -2
- package/src/http-api/OpenApi.ts +20 -17
- package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
- package/src/index.ts +6 -6
- package/src/internal/arbitrary/runner.ts +133 -36
- package/src/internal/core.ts +2 -0
- package/src/internal/effect.ts +58 -34
- package/src/internal/equal.ts +17 -0
- package/src/internal/glob.ts +736 -0
- package/src/internal/jsonSchema.ts +27 -0
- package/src/internal/matcher.ts +18 -1
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -1
- package/src/internal/schema/compilerRegistry.ts +6 -1
- package/src/internal/schema/content.ts +18 -0
- package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
- package/src/internal/schema/fromRepresentation.ts +2 -1
- package/src/internal/schema/standardSchema.ts +2 -2
- package/src/internal/schema/toCodeDocument.ts +11 -7
- package/src/internal/schema/toCodec.ts +26 -22
- package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
- package/src/internal/schema/toRepresentation.ts +122 -140
- package/src/internal/sql.ts +14 -0
- 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/OtlpProxy.ts +314 -0
- package/src/observability/OtlpResource.ts +9 -1
- package/src/observability/OtlpTracer.ts +4 -0
- package/src/observability/index.ts +6 -0
- package/src/persistence/CircuitBreaker.ts +1678 -0
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/persistence/Redis.ts +129 -8
- package/src/persistence/index.ts +6 -0
- package/src/process/ChildProcess.ts +285 -264
- package/src/process/ChildProcessSpawner.ts +46 -2
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/AsyncResult.ts +1 -1
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +1 -1
- package/src/rpc/RpcClient.ts +75 -36
- package/src/rpc/RpcMessage.ts +10 -1
- package/src/rpc/RpcSerialization.ts +35 -9
- package/src/rpc/RpcServer.ts +176 -63
- package/src/rpc/RpcTest.ts +3 -0
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +15 -69
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +13 -20
- package/src/sql/SqlResolver.ts +23 -9
- package/src/sql/Statement.ts +38 -9
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/DurableDeferred.ts +23 -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
|
@@ -17,10 +17,13 @@ import * as Effectable from "../Effectable.ts"
|
|
|
17
17
|
import { dual } from "../Function.ts"
|
|
18
18
|
import type * as PlatformError from "../PlatformError.ts"
|
|
19
19
|
import * as Predicate from "../Predicate.ts"
|
|
20
|
+
import type * as Redacted from "../Redacted.ts"
|
|
21
|
+
import * as Result from "../Result.ts"
|
|
20
22
|
import type * as Scope from "../Scope.ts"
|
|
21
23
|
import type * as Sink from "../Sink.ts"
|
|
22
24
|
import type * as Stream from "../Stream.ts"
|
|
23
25
|
import { type ChildProcessHandle, ChildProcessSpawner } from "./ChildProcessSpawner.ts"
|
|
26
|
+
import * as CommandLine from "./CommandLine.ts"
|
|
24
27
|
|
|
25
28
|
const TypeId = "~effect/process/ChildProcess"
|
|
26
29
|
|
|
@@ -51,7 +54,7 @@ export interface StandardCommand extends
|
|
|
51
54
|
{
|
|
52
55
|
readonly _tag: "StandardCommand"
|
|
53
56
|
readonly command: string
|
|
54
|
-
readonly args: ReadonlyArray<
|
|
57
|
+
readonly args: ReadonlyArray<CommandLine.Word>
|
|
55
58
|
readonly options: CommandOptions
|
|
56
59
|
}
|
|
57
60
|
|
|
@@ -144,7 +147,8 @@ export interface PipeOptions {
|
|
|
144
147
|
* **Details**
|
|
145
148
|
*
|
|
146
149
|
* - `"stdin"` (default): Pipe to stdin of the destination
|
|
147
|
-
* - `"fd3"`, `"fd4"`, etc.: Pipe to a custom file descriptor
|
|
150
|
+
* - `"fd3"`, `"fd4"`, etc.: Pipe to a custom file descriptor. A descriptor
|
|
151
|
+
* configured as `"duplex"` stays duplex.
|
|
148
152
|
*/
|
|
149
153
|
readonly to?: PipeToOption | undefined
|
|
150
154
|
}
|
|
@@ -319,10 +323,17 @@ export interface StdoutConfig {
|
|
|
319
323
|
* Can be a string indicating how the operating system should configure the
|
|
320
324
|
* pipe established between the child process `stdout` and the parent process.
|
|
321
325
|
*
|
|
322
|
-
* A `Sink` can also be passed
|
|
323
|
-
*
|
|
326
|
+
* A `Sink` can also be passed. The output is transduced through the sink as
|
|
327
|
+
* `handle.stdout` is consumed, and `handle.stdout` emits the results produced by
|
|
328
|
+
* the sink instead of the raw output.
|
|
324
329
|
*
|
|
325
330
|
* Defaults to "pipe".
|
|
331
|
+
*
|
|
332
|
+
* **Gotchas**
|
|
333
|
+
*
|
|
334
|
+
* A `Sink` only receives data while `handle.stdout` is being consumed. If
|
|
335
|
+
* it is never consumed, the sink receives nothing and a child process that
|
|
336
|
+
* writes more than the pipe buffer can block before it exits.
|
|
326
337
|
*/
|
|
327
338
|
readonly stream?: CommandOutput | undefined
|
|
328
339
|
}
|
|
@@ -343,10 +354,17 @@ export interface StderrConfig {
|
|
|
343
354
|
* Can be a string indicating how the operating system should configure the
|
|
344
355
|
* pipe established between the child process `stderr` and the parent process.
|
|
345
356
|
*
|
|
346
|
-
* A `Sink` can also be passed
|
|
347
|
-
*
|
|
357
|
+
* A `Sink` can also be passed. The output is transduced through the sink as
|
|
358
|
+
* `handle.stderr` is consumed, and `handle.stderr` emits the results produced by
|
|
359
|
+
* the sink instead of the raw output.
|
|
348
360
|
*
|
|
349
361
|
* Defaults to "pipe".
|
|
362
|
+
*
|
|
363
|
+
* **Gotchas**
|
|
364
|
+
*
|
|
365
|
+
* A `Sink` only receives data while `handle.stderr` is being consumed. If
|
|
366
|
+
* it is never consumed, the sink receives nothing and a child process that
|
|
367
|
+
* writes more than the pipe buffer can block before it exits.
|
|
350
368
|
*/
|
|
351
369
|
readonly stream?: CommandOutput | undefined
|
|
352
370
|
}
|
|
@@ -382,6 +400,35 @@ export type AdditionalFdConfig =
|
|
|
382
400
|
/**
|
|
383
401
|
* For output file descriptors, an optional sink which receives data from
|
|
384
402
|
* the file descriptor.
|
|
403
|
+
*
|
|
404
|
+
* **Details**
|
|
405
|
+
*
|
|
406
|
+
* The data is transduced through the sink as `handle.getOutputFd(fd)` is
|
|
407
|
+
* consumed, and that stream emits the results produced by the sink
|
|
408
|
+
* instead of the raw output.
|
|
409
|
+
*
|
|
410
|
+
* **Gotchas**
|
|
411
|
+
*
|
|
412
|
+
* The sink only receives data while `handle.getOutputFd(fd)` is being
|
|
413
|
+
* consumed. If it is never consumed, the sink receives nothing and a child
|
|
414
|
+
* process that writes more than the pipe buffer can block before it exits.
|
|
415
|
+
*/
|
|
416
|
+
readonly sink?: Sink.Sink<Uint8Array, Uint8Array, never, PlatformError.PlatformError> | undefined
|
|
417
|
+
}
|
|
418
|
+
| {
|
|
419
|
+
/**
|
|
420
|
+
* The direction of data flow for this file descriptor.
|
|
421
|
+
* - "duplex": Data flows in both directions over the same file descriptor
|
|
422
|
+
* (writable and readable by parent)
|
|
423
|
+
*/
|
|
424
|
+
readonly type: "duplex"
|
|
425
|
+
/**
|
|
426
|
+
* An optional stream to write into the file descriptor. The write side is
|
|
427
|
+
* ended when the stream completes.
|
|
428
|
+
*/
|
|
429
|
+
readonly stream?: Stream.Stream<Uint8Array, PlatformError.PlatformError> | undefined
|
|
430
|
+
/**
|
|
431
|
+
* An optional sink which receives data read from the file descriptor.
|
|
385
432
|
*/
|
|
386
433
|
readonly sink?: Sink.Sink<Uint8Array, Uint8Array, never, PlatformError.PlatformError> | undefined
|
|
387
434
|
}
|
|
@@ -405,14 +452,18 @@ export interface CommandOptions extends KillOptions {
|
|
|
405
452
|
*
|
|
406
453
|
* If `extendEnv` is set to `true`, the value of `env` will be merged with
|
|
407
454
|
* the value of `globalThis.process.env`, prioritizing the values in `env`
|
|
408
|
-
* when conflicts exist.
|
|
455
|
+
* when conflicts exist. A variable set to `undefined` is then removed from
|
|
456
|
+
* the child environment.
|
|
457
|
+
*
|
|
458
|
+
* `Redacted` values are passed to the child unchanged and are never shown in
|
|
459
|
+
* errors.
|
|
409
460
|
*
|
|
410
461
|
* **Gotchas**
|
|
411
462
|
*
|
|
412
463
|
* Without `extendEnv: true`, providing `env` replaces the inherited child
|
|
413
464
|
* environment. The child will not receive `PATH` unless `env` includes it.
|
|
414
465
|
*/
|
|
415
|
-
readonly env?: Record<string, string | undefined> | undefined
|
|
466
|
+
readonly env?: Record<string, string | Redacted.Redacted<string> | undefined> | undefined
|
|
416
467
|
/**
|
|
417
468
|
* If set to `true`, the child process uses both the values in `env` as well
|
|
418
469
|
* as the values in `globalThis.process.env`, prioritizing the values in `env`
|
|
@@ -426,17 +477,45 @@ export interface CommandOptions extends KillOptions {
|
|
|
426
477
|
*/
|
|
427
478
|
readonly extendEnv?: boolean | undefined
|
|
428
479
|
/**
|
|
429
|
-
* If set to `true`, runs the command inside of a shell,
|
|
430
|
-
* on UNIX systems and `cmd.exe` on Windows.
|
|
480
|
+
* If set to `true`, runs the command as a script inside of a shell,
|
|
481
|
+
* defaulting to `/bin/sh` on UNIX systems and `cmd.exe` on Windows.
|
|
431
482
|
*
|
|
432
483
|
* **Details**
|
|
433
484
|
*
|
|
434
485
|
* Can also be set to a string representing the absolute path to a shell to
|
|
435
|
-
* use on the system.
|
|
486
|
+
* use on the system. The command is the whole script; build it with
|
|
487
|
+
* `CommandLine.join` or `CommandLine.quote` when it contains values.
|
|
488
|
+
*
|
|
489
|
+
* This is also the way to run a command configured as shell text, such as
|
|
490
|
+
* the `EDITOR` environment variable. The setting is trusted shell text and
|
|
491
|
+
* runs as written, so use it as the start of the script and quote the values
|
|
492
|
+
* that follow it. Name a POSIX shell, because `shell: true` runs `cmd.exe` on
|
|
493
|
+
* Windows, which POSIX quoting does not protect.
|
|
436
494
|
*
|
|
437
495
|
* **Gotchas**
|
|
438
496
|
*
|
|
439
|
-
*
|
|
497
|
+
* - Running a command with both `shell` and arguments fails with a
|
|
498
|
+
* `BadArgument` error, because shells would join the arguments into the
|
|
499
|
+
* script without quoting them.
|
|
500
|
+
* - On Windows the script runs in `cmd.exe`, which no `CommandLine` format
|
|
501
|
+
* quotes for. `CommandLine.join` with `format: "windows"` is only safe for
|
|
502
|
+
* arguments without `%`, `^`, `&`, `|`, `<` or `>`.
|
|
503
|
+
* - It is generally disadvised to use this option.
|
|
504
|
+
*
|
|
505
|
+
* **Example** (Running a configured editor)
|
|
506
|
+
*
|
|
507
|
+
* ```ts import.meta.vitest
|
|
508
|
+
* import { Result } from "effect"
|
|
509
|
+
* import { ChildProcess, CommandLine } from "effect/process"
|
|
510
|
+
*
|
|
511
|
+
* const editor = "code --wait" // for example, process.env.EDITOR
|
|
512
|
+
* const file = "notes from today.txt"
|
|
513
|
+
*
|
|
514
|
+
* const command = ChildProcess.make(`${editor} ${Result.getOrThrow(CommandLine.quote(file))}`, {
|
|
515
|
+
* shell: "/bin/sh"
|
|
516
|
+
* })
|
|
517
|
+
* command.command // => "code --wait 'notes from today.txt'"
|
|
518
|
+
* ```
|
|
440
519
|
*/
|
|
441
520
|
readonly shell?: boolean | string | undefined
|
|
442
521
|
/**
|
|
@@ -482,11 +561,21 @@ export interface CommandOptions extends KillOptions {
|
|
|
482
561
|
*
|
|
483
562
|
* **Details**
|
|
484
563
|
*
|
|
485
|
-
* Keys
|
|
486
|
-
*
|
|
564
|
+
* Keys use the descriptor index: `"fd3"`, `"fd4"`, etc. (index >= 3).
|
|
565
|
+
*
|
|
566
|
+
* For `"duplex"`, use `getInputFd` to write and `getOutputFd` to read the same
|
|
567
|
+
* descriptor. `pipeTo` preserves duplex targets, replacing only their input.
|
|
568
|
+
*
|
|
569
|
+
* Duplex request/response and half-close are verified on Linux with Node.js
|
|
570
|
+
* and raw Deno `node:child_process` (not Effect's spawner). The same behavior
|
|
571
|
+
* is expected on macOS; Windows request/response is expected but unverified.
|
|
572
|
+
* Half-close is unsupported on Windows and Bun: keep the input open until
|
|
573
|
+
* all responses are read. Bun extra descriptors on Windows are unverified.
|
|
574
|
+
* Native `DenoChildProcessSpawner` does not support additional descriptors.
|
|
487
575
|
*
|
|
488
|
-
*
|
|
489
|
-
*
|
|
576
|
+
* Node.js and Deno children can use `new net.Socket({ fd: 3 })`. Deno children
|
|
577
|
+
* cannot use `node:fs` on the raw descriptor; Bun children cannot use
|
|
578
|
+
* `net.Socket` on it.
|
|
490
579
|
*
|
|
491
580
|
* **Example** (Configuring additional file descriptors)
|
|
492
581
|
*
|
|
@@ -506,31 +595,23 @@ export interface CommandOptions extends KillOptions {
|
|
|
506
595
|
* fd3: { type: "input" }
|
|
507
596
|
* }
|
|
508
597
|
* })
|
|
509
|
-
*
|
|
510
|
-
*
|
|
598
|
+
* // Duplex fd3 - write and read over the same descriptor
|
|
599
|
+
* const cmd3 = ChildProcess.make("my-program", [], {
|
|
600
|
+
* additionalFds: {
|
|
601
|
+
* fd3: { type: "duplex" }
|
|
602
|
+
* }
|
|
603
|
+
* })
|
|
604
|
+
* const result = [
|
|
605
|
+
* cmd1.options.additionalFds?.fd3?.type,
|
|
606
|
+
* cmd2.options.additionalFds?.fd3?.type,
|
|
607
|
+
* cmd3.options.additionalFds?.fd3?.type
|
|
608
|
+
* ]
|
|
609
|
+
* result // => ["output", "input", "duplex"]
|
|
511
610
|
* ```
|
|
512
611
|
*/
|
|
513
612
|
readonly additionalFds?: Record<`fd${number}`, AdditionalFdConfig> | undefined
|
|
514
613
|
}
|
|
515
614
|
|
|
516
|
-
/**
|
|
517
|
-
* Valid template expression item types.
|
|
518
|
-
*
|
|
519
|
-
* @stability unstable
|
|
520
|
-
* @category models
|
|
521
|
-
* @since 4.0.0
|
|
522
|
-
*/
|
|
523
|
-
export type TemplateExpressionItem = string | number | boolean
|
|
524
|
-
|
|
525
|
-
/**
|
|
526
|
-
* Template expression type for interpolated values.
|
|
527
|
-
*
|
|
528
|
-
* @stability unstable
|
|
529
|
-
* @category models
|
|
530
|
-
* @since 4.0.0
|
|
531
|
-
*/
|
|
532
|
-
export type TemplateExpression = TemplateExpressionItem | ReadonlyArray<TemplateExpressionItem>
|
|
533
|
-
|
|
534
615
|
// =============================================================================
|
|
535
616
|
// Constructors
|
|
536
617
|
// =============================================================================
|
|
@@ -574,7 +655,7 @@ export const isPipedCommand = (command: Command): command is PipedCommand => com
|
|
|
574
655
|
|
|
575
656
|
const makeStandardCommand = (
|
|
576
657
|
command: string,
|
|
577
|
-
args: ReadonlyArray<
|
|
658
|
+
args: ReadonlyArray<CommandLine.Word>,
|
|
578
659
|
options: CommandOptions
|
|
579
660
|
): StandardCommand =>
|
|
580
661
|
Object.assign(Object.create(Proto), {
|
|
@@ -606,16 +687,33 @@ const makePipedCommand = (
|
|
|
606
687
|
* 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
|
|
607
688
|
* 3. Array form: `make("npm", ["run", "build"], options?)`
|
|
608
689
|
*
|
|
609
|
-
*
|
|
610
|
-
*
|
|
690
|
+
* Templates are split with `CommandLine.template`: quotes group words, each
|
|
691
|
+
* `${}` value is one literal argument, and an argument that contains a
|
|
692
|
+
* `Redacted` value stays `Redacted`. Arguments in the array form can be
|
|
693
|
+
* `Redacted` too.
|
|
694
|
+
*
|
|
695
|
+
* With the `shell` option, the template text is the shell script and is kept
|
|
696
|
+
* as written.
|
|
697
|
+
*
|
|
698
|
+
* **Gotchas**
|
|
699
|
+
*
|
|
700
|
+
* - A template is parsed when `make` is called. Shell syntax such as `|`,
|
|
701
|
+
* `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
|
|
702
|
+
* pass the value with `${}`.
|
|
703
|
+
* - A template with the `shell` option cannot contain `${}` values, because
|
|
704
|
+
* their quoting depends on the shell. Build the script with
|
|
705
|
+
* `CommandLine.quote` and pass it as a string.
|
|
706
|
+
* - The program name, the first word, cannot be `Redacted`.
|
|
707
|
+
* - A NUL character in the command, an argument or an `env` value fails with
|
|
708
|
+
* a `BadArgument` error when the command is spawned.
|
|
611
709
|
*
|
|
612
710
|
* **Example** (Creating commands)
|
|
613
711
|
*
|
|
614
712
|
* ```ts import.meta.vitest
|
|
615
713
|
* import { ChildProcess } from "effect/process"
|
|
616
714
|
*
|
|
617
|
-
* // Template literal form
|
|
618
|
-
* const cmd1 = ChildProcess.make`echo "hello"`
|
|
715
|
+
* // Template literal form; quotes group words
|
|
716
|
+
* const cmd1 = ChildProcess.make`echo "hello world"`
|
|
619
717
|
*
|
|
620
718
|
* // With options
|
|
621
719
|
* const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
|
|
@@ -623,7 +721,7 @@ const makePipedCommand = (
|
|
|
623
721
|
* // Array form
|
|
624
722
|
* const cmd3 = ChildProcess.make("git", ["status"])
|
|
625
723
|
*
|
|
626
|
-
* const result = [cmd1.
|
|
724
|
+
* const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
|
|
627
725
|
* ```
|
|
628
726
|
*
|
|
629
727
|
* @stability unstable
|
|
@@ -641,16 +739,33 @@ export const make: {
|
|
|
641
739
|
* 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
|
|
642
740
|
* 3. Array form: `make("npm", ["run", "build"], options?)`
|
|
643
741
|
*
|
|
644
|
-
*
|
|
645
|
-
*
|
|
742
|
+
* Templates are split with `CommandLine.template`: quotes group words, each
|
|
743
|
+
* `${}` value is one literal argument, and an argument that contains a
|
|
744
|
+
* `Redacted` value stays `Redacted`. Arguments in the array form can be
|
|
745
|
+
* `Redacted` too.
|
|
746
|
+
*
|
|
747
|
+
* With the `shell` option, the template text is the shell script and is kept
|
|
748
|
+
* as written.
|
|
749
|
+
*
|
|
750
|
+
* **Gotchas**
|
|
751
|
+
*
|
|
752
|
+
* - A template is parsed when `make` is called. Shell syntax such as `|`,
|
|
753
|
+
* `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
|
|
754
|
+
* pass the value with `${}`.
|
|
755
|
+
* - A template with the `shell` option cannot contain `${}` values, because
|
|
756
|
+
* their quoting depends on the shell. Build the script with
|
|
757
|
+
* `CommandLine.quote` and pass it as a string.
|
|
758
|
+
* - The program name, the first word, cannot be `Redacted`.
|
|
759
|
+
* - A NUL character in the command, an argument or an `env` value fails with
|
|
760
|
+
* a `BadArgument` error when the command is spawned.
|
|
646
761
|
*
|
|
647
762
|
* **Example** (Creating commands)
|
|
648
763
|
*
|
|
649
764
|
* ```ts import.meta.vitest
|
|
650
765
|
* import { ChildProcess } from "effect/process"
|
|
651
766
|
*
|
|
652
|
-
* // Template literal form
|
|
653
|
-
* const cmd1 = ChildProcess.make`echo "hello"`
|
|
767
|
+
* // Template literal form; quotes group words
|
|
768
|
+
* const cmd1 = ChildProcess.make`echo "hello world"`
|
|
654
769
|
*
|
|
655
770
|
* // With options
|
|
656
771
|
* const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
|
|
@@ -658,7 +773,7 @@ export const make: {
|
|
|
658
773
|
* // Array form
|
|
659
774
|
* const cmd3 = ChildProcess.make("git", ["status"])
|
|
660
775
|
*
|
|
661
|
-
* const result = [cmd1.
|
|
776
|
+
* const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
|
|
662
777
|
* ```
|
|
663
778
|
*
|
|
664
779
|
* @stability unstable
|
|
@@ -676,16 +791,33 @@ export const make: {
|
|
|
676
791
|
* 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
|
|
677
792
|
* 3. Array form: `make("npm", ["run", "build"], options?)`
|
|
678
793
|
*
|
|
679
|
-
*
|
|
680
|
-
*
|
|
794
|
+
* Templates are split with `CommandLine.template`: quotes group words, each
|
|
795
|
+
* `${}` value is one literal argument, and an argument that contains a
|
|
796
|
+
* `Redacted` value stays `Redacted`. Arguments in the array form can be
|
|
797
|
+
* `Redacted` too.
|
|
798
|
+
*
|
|
799
|
+
* With the `shell` option, the template text is the shell script and is kept
|
|
800
|
+
* as written.
|
|
801
|
+
*
|
|
802
|
+
* **Gotchas**
|
|
803
|
+
*
|
|
804
|
+
* - A template is parsed when `make` is called. Shell syntax such as `|`,
|
|
805
|
+
* `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
|
|
806
|
+
* pass the value with `${}`.
|
|
807
|
+
* - A template with the `shell` option cannot contain `${}` values, because
|
|
808
|
+
* their quoting depends on the shell. Build the script with
|
|
809
|
+
* `CommandLine.quote` and pass it as a string.
|
|
810
|
+
* - The program name, the first word, cannot be `Redacted`.
|
|
811
|
+
* - A NUL character in the command, an argument or an `env` value fails with
|
|
812
|
+
* a `BadArgument` error when the command is spawned.
|
|
681
813
|
*
|
|
682
814
|
* **Example** (Creating commands)
|
|
683
815
|
*
|
|
684
816
|
* ```ts import.meta.vitest
|
|
685
817
|
* import { ChildProcess } from "effect/process"
|
|
686
818
|
*
|
|
687
|
-
* // Template literal form
|
|
688
|
-
* const cmd1 = ChildProcess.make`echo "hello"`
|
|
819
|
+
* // Template literal form; quotes group words
|
|
820
|
+
* const cmd1 = ChildProcess.make`echo "hello world"`
|
|
689
821
|
*
|
|
690
822
|
* // With options
|
|
691
823
|
* const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
|
|
@@ -693,14 +825,18 @@ export const make: {
|
|
|
693
825
|
* // Array form
|
|
694
826
|
* const cmd3 = ChildProcess.make("git", ["status"])
|
|
695
827
|
*
|
|
696
|
-
* const result = [cmd1.
|
|
828
|
+
* const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
|
|
697
829
|
* ```
|
|
698
830
|
*
|
|
699
831
|
* @stability unstable
|
|
700
832
|
* @category constructors
|
|
701
833
|
* @since 4.0.0
|
|
702
834
|
*/
|
|
703
|
-
(
|
|
835
|
+
(
|
|
836
|
+
command: string,
|
|
837
|
+
args: ReadonlyArray<CommandLine.Word>,
|
|
838
|
+
options?: CommandOptions
|
|
839
|
+
): StandardCommand
|
|
704
840
|
/**
|
|
705
841
|
* Create a command from a template literal, options + template, or array form.
|
|
706
842
|
*
|
|
@@ -711,16 +847,33 @@ export const make: {
|
|
|
711
847
|
* 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
|
|
712
848
|
* 3. Array form: `make("npm", ["run", "build"], options?)`
|
|
713
849
|
*
|
|
714
|
-
*
|
|
715
|
-
*
|
|
850
|
+
* Templates are split with `CommandLine.template`: quotes group words, each
|
|
851
|
+
* `${}` value is one literal argument, and an argument that contains a
|
|
852
|
+
* `Redacted` value stays `Redacted`. Arguments in the array form can be
|
|
853
|
+
* `Redacted` too.
|
|
854
|
+
*
|
|
855
|
+
* With the `shell` option, the template text is the shell script and is kept
|
|
856
|
+
* as written.
|
|
857
|
+
*
|
|
858
|
+
* **Gotchas**
|
|
859
|
+
*
|
|
860
|
+
* - A template is parsed when `make` is called. Shell syntax such as `|`,
|
|
861
|
+
* `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
|
|
862
|
+
* pass the value with `${}`.
|
|
863
|
+
* - A template with the `shell` option cannot contain `${}` values, because
|
|
864
|
+
* their quoting depends on the shell. Build the script with
|
|
865
|
+
* `CommandLine.quote` and pass it as a string.
|
|
866
|
+
* - The program name, the first word, cannot be `Redacted`.
|
|
867
|
+
* - A NUL character in the command, an argument or an `env` value fails with
|
|
868
|
+
* a `BadArgument` error when the command is spawned.
|
|
716
869
|
*
|
|
717
870
|
* **Example** (Creating commands)
|
|
718
871
|
*
|
|
719
872
|
* ```ts import.meta.vitest
|
|
720
873
|
* import { ChildProcess } from "effect/process"
|
|
721
874
|
*
|
|
722
|
-
* // Template literal form
|
|
723
|
-
* const cmd1 = ChildProcess.make`echo "hello"`
|
|
875
|
+
* // Template literal form; quotes group words
|
|
876
|
+
* const cmd1 = ChildProcess.make`echo "hello world"`
|
|
724
877
|
*
|
|
725
878
|
* // With options
|
|
726
879
|
* const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
|
|
@@ -728,7 +881,7 @@ export const make: {
|
|
|
728
881
|
* // Array form
|
|
729
882
|
* const cmd3 = ChildProcess.make("git", ["status"])
|
|
730
883
|
*
|
|
731
|
-
* const result = [cmd1.
|
|
884
|
+
* const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
|
|
732
885
|
* ```
|
|
733
886
|
*
|
|
734
887
|
* @stability unstable
|
|
@@ -737,7 +890,7 @@ export const make: {
|
|
|
737
890
|
*/
|
|
738
891
|
(options: CommandOptions): (
|
|
739
892
|
templates: TemplateStringsArray,
|
|
740
|
-
...expressions: ReadonlyArray<TemplateExpression>
|
|
893
|
+
...expressions: ReadonlyArray<CommandLine.TemplateExpression>
|
|
741
894
|
) => StandardCommand
|
|
742
895
|
/**
|
|
743
896
|
* Create a command from a template literal, options + template, or array form.
|
|
@@ -749,16 +902,33 @@ export const make: {
|
|
|
749
902
|
* 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
|
|
750
903
|
* 3. Array form: `make("npm", ["run", "build"], options?)`
|
|
751
904
|
*
|
|
752
|
-
*
|
|
753
|
-
*
|
|
905
|
+
* Templates are split with `CommandLine.template`: quotes group words, each
|
|
906
|
+
* `${}` value is one literal argument, and an argument that contains a
|
|
907
|
+
* `Redacted` value stays `Redacted`. Arguments in the array form can be
|
|
908
|
+
* `Redacted` too.
|
|
909
|
+
*
|
|
910
|
+
* With the `shell` option, the template text is the shell script and is kept
|
|
911
|
+
* as written.
|
|
912
|
+
*
|
|
913
|
+
* **Gotchas**
|
|
914
|
+
*
|
|
915
|
+
* - A template is parsed when `make` is called. Shell syntax such as `|`,
|
|
916
|
+
* `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
|
|
917
|
+
* pass the value with `${}`.
|
|
918
|
+
* - A template with the `shell` option cannot contain `${}` values, because
|
|
919
|
+
* their quoting depends on the shell. Build the script with
|
|
920
|
+
* `CommandLine.quote` and pass it as a string.
|
|
921
|
+
* - The program name, the first word, cannot be `Redacted`.
|
|
922
|
+
* - A NUL character in the command, an argument or an `env` value fails with
|
|
923
|
+
* a `BadArgument` error when the command is spawned.
|
|
754
924
|
*
|
|
755
925
|
* **Example** (Creating commands)
|
|
756
926
|
*
|
|
757
927
|
* ```ts import.meta.vitest
|
|
758
928
|
* import { ChildProcess } from "effect/process"
|
|
759
929
|
*
|
|
760
|
-
* // Template literal form
|
|
761
|
-
* const cmd1 = ChildProcess.make`echo "hello"`
|
|
930
|
+
* // Template literal form; quotes group words
|
|
931
|
+
* const cmd1 = ChildProcess.make`echo "hello world"`
|
|
762
932
|
*
|
|
763
933
|
* // With options
|
|
764
934
|
* const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
|
|
@@ -766,7 +936,7 @@ export const make: {
|
|
|
766
936
|
* // Array form
|
|
767
937
|
* const cmd3 = ChildProcess.make("git", ["status"])
|
|
768
938
|
*
|
|
769
|
-
* const result = [cmd1.
|
|
939
|
+
* const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
|
|
770
940
|
* ```
|
|
771
941
|
*
|
|
772
942
|
* @stability unstable
|
|
@@ -775,14 +945,14 @@ export const make: {
|
|
|
775
945
|
*/
|
|
776
946
|
(
|
|
777
947
|
templates: TemplateStringsArray,
|
|
778
|
-
...expressions: ReadonlyArray<TemplateExpression>
|
|
948
|
+
...expressions: ReadonlyArray<CommandLine.TemplateExpression>
|
|
779
949
|
): StandardCommand
|
|
780
950
|
} = function make(...args: Array<unknown>): any {
|
|
781
951
|
// Template literal form: make`command`
|
|
782
952
|
if (isTemplateString(args[0])) {
|
|
783
|
-
const [templates, ...expressions] = args as [TemplateStringsArray, ...ReadonlyArray<TemplateExpression>]
|
|
784
|
-
const
|
|
785
|
-
return makeStandardCommand(
|
|
953
|
+
const [templates, ...expressions] = args as [TemplateStringsArray, ...ReadonlyArray<CommandLine.TemplateExpression>]
|
|
954
|
+
const [command, cmdArgs] = parseTemplate(templates, expressions)
|
|
955
|
+
return makeStandardCommand(command, cmdArgs, {})
|
|
786
956
|
}
|
|
787
957
|
|
|
788
958
|
// Options form: make({ cwd: "/tmp" })`command`
|
|
@@ -790,10 +960,13 @@ export const make: {
|
|
|
790
960
|
const options = args[0] as CommandOptions
|
|
791
961
|
return function(
|
|
792
962
|
templates: TemplateStringsArray,
|
|
793
|
-
...expressions: ReadonlyArray<TemplateExpression>
|
|
963
|
+
...expressions: ReadonlyArray<CommandLine.TemplateExpression>
|
|
794
964
|
): StandardCommand {
|
|
795
|
-
|
|
796
|
-
|
|
965
|
+
if (options.shell !== undefined && options.shell !== false) {
|
|
966
|
+
return makeStandardCommand(shellScript(templates, expressions), [], options)
|
|
967
|
+
}
|
|
968
|
+
const [command, cmdArgs] = parseTemplate(templates, expressions)
|
|
969
|
+
return makeStandardCommand(command, cmdArgs, options)
|
|
797
970
|
}
|
|
798
971
|
}
|
|
799
972
|
|
|
@@ -806,7 +979,7 @@ export const make: {
|
|
|
806
979
|
// Standard form with arguments: make("command", ["arg1", "arg2"], options?)
|
|
807
980
|
const [command, cmdArgs = [], options = {}] = args as [
|
|
808
981
|
string,
|
|
809
|
-
ReadonlyArray<
|
|
982
|
+
ReadonlyArray<CommandLine.Word>?,
|
|
810
983
|
CommandOptions?
|
|
811
984
|
]
|
|
812
985
|
return makeStandardCommand(command, cmdArgs, options)
|
|
@@ -940,7 +1113,7 @@ export const pipeTo: {
|
|
|
940
1113
|
* ```ts import.meta.vitest
|
|
941
1114
|
* import { ChildProcess } from "effect/process"
|
|
942
1115
|
*
|
|
943
|
-
* const command = ChildProcess.make`echo
|
|
1116
|
+
* const command = ChildProcess.make`echo foo`
|
|
944
1117
|
*
|
|
945
1118
|
* const prefixed = command.pipe(
|
|
946
1119
|
* ChildProcess.prefix`time`
|
|
@@ -968,7 +1141,7 @@ export const prefix: {
|
|
|
968
1141
|
* ```ts import.meta.vitest
|
|
969
1142
|
* import { ChildProcess } from "effect/process"
|
|
970
1143
|
*
|
|
971
|
-
* const command = ChildProcess.make`echo
|
|
1144
|
+
* const command = ChildProcess.make`echo foo`
|
|
972
1145
|
*
|
|
973
1146
|
* const prefixed = command.pipe(
|
|
974
1147
|
* ChildProcess.prefix`time`
|
|
@@ -983,7 +1156,7 @@ export const prefix: {
|
|
|
983
1156
|
* @category combinators
|
|
984
1157
|
* @since 4.0.0
|
|
985
1158
|
*/
|
|
986
|
-
(command: string, args?: ReadonlyArray<
|
|
1159
|
+
(command: string, args?: ReadonlyArray<CommandLine.Word>): (self: Command) => Command
|
|
987
1160
|
/**
|
|
988
1161
|
* Prepends another command to a command.
|
|
989
1162
|
*
|
|
@@ -996,7 +1169,7 @@ export const prefix: {
|
|
|
996
1169
|
* ```ts import.meta.vitest
|
|
997
1170
|
* import { ChildProcess } from "effect/process"
|
|
998
1171
|
*
|
|
999
|
-
* const command = ChildProcess.make`echo
|
|
1172
|
+
* const command = ChildProcess.make`echo foo`
|
|
1000
1173
|
*
|
|
1001
1174
|
* const prefixed = command.pipe(
|
|
1002
1175
|
* ChildProcess.prefix`time`
|
|
@@ -1013,7 +1186,7 @@ export const prefix: {
|
|
|
1013
1186
|
*/
|
|
1014
1187
|
(
|
|
1015
1188
|
templates: TemplateStringsArray,
|
|
1016
|
-
...expressions: ReadonlyArray<TemplateExpression>
|
|
1189
|
+
...expressions: ReadonlyArray<CommandLine.TemplateExpression>
|
|
1017
1190
|
): (self: Command) => Command
|
|
1018
1191
|
/**
|
|
1019
1192
|
* Prepends another command to a command.
|
|
@@ -1027,7 +1200,7 @@ export const prefix: {
|
|
|
1027
1200
|
* ```ts import.meta.vitest
|
|
1028
1201
|
* import { ChildProcess } from "effect/process"
|
|
1029
1202
|
*
|
|
1030
|
-
* const command = ChildProcess.make`echo
|
|
1203
|
+
* const command = ChildProcess.make`echo foo`
|
|
1031
1204
|
*
|
|
1032
1205
|
* const prefixed = command.pipe(
|
|
1033
1206
|
* ChildProcess.prefix`time`
|
|
@@ -1042,7 +1215,7 @@ export const prefix: {
|
|
|
1042
1215
|
* @category combinators
|
|
1043
1216
|
* @since 4.0.0
|
|
1044
1217
|
*/
|
|
1045
|
-
(self: Command, command: string, args?: ReadonlyArray<
|
|
1218
|
+
(self: Command, command: string, args?: ReadonlyArray<CommandLine.Word>): Command
|
|
1046
1219
|
} = function prefix(...args: Array<unknown>): any {
|
|
1047
1220
|
if (isCommand(args[0]) && args.length > 1) {
|
|
1048
1221
|
const [self, ...rest] = args as [Command, ...Array<unknown>]
|
|
@@ -1055,16 +1228,16 @@ export const prefix: {
|
|
|
1055
1228
|
|
|
1056
1229
|
type PrefixSpec = {
|
|
1057
1230
|
readonly command: string
|
|
1058
|
-
readonly args: ReadonlyArray<
|
|
1231
|
+
readonly args: ReadonlyArray<CommandLine.Word>
|
|
1059
1232
|
}
|
|
1060
1233
|
|
|
1061
1234
|
const parsePrefixArgs = (args: ReadonlyArray<unknown>): PrefixSpec => {
|
|
1062
1235
|
if (isTemplateString(args[0])) {
|
|
1063
|
-
const [templates, ...expressions] = args as [TemplateStringsArray, ...ReadonlyArray<TemplateExpression>]
|
|
1064
|
-
const
|
|
1065
|
-
return { command
|
|
1236
|
+
const [templates, ...expressions] = args as [TemplateStringsArray, ...ReadonlyArray<CommandLine.TemplateExpression>]
|
|
1237
|
+
const [command, cmdArgs] = parseTemplate(templates, expressions)
|
|
1238
|
+
return { command, args: cmdArgs }
|
|
1066
1239
|
}
|
|
1067
|
-
const [command, cmdArgs = []] = args as [string, ReadonlyArray<
|
|
1240
|
+
const [command, cmdArgs = []] = args as [string, ReadonlyArray<CommandLine.Word>?]
|
|
1068
1241
|
return { command, args: cmdArgs }
|
|
1069
1242
|
}
|
|
1070
1243
|
|
|
@@ -1213,7 +1386,7 @@ export const setEnv: {
|
|
|
1213
1386
|
* @category combinators
|
|
1214
1387
|
* @since 4.0.0
|
|
1215
1388
|
*/
|
|
1216
|
-
(env: Record<string, string
|
|
1389
|
+
(env: Record<string, string | Redacted.Redacted<string>>): (self: Command) => Command
|
|
1217
1390
|
/**
|
|
1218
1391
|
* Adds environment variables to a command, merging them with any existing
|
|
1219
1392
|
* command environment and overriding duplicate keys.
|
|
@@ -1237,10 +1410,10 @@ export const setEnv: {
|
|
|
1237
1410
|
* @category combinators
|
|
1238
1411
|
* @since 4.0.0
|
|
1239
1412
|
*/
|
|
1240
|
-
(self: Command, env: Record<string, string
|
|
1413
|
+
(self: Command, env: Record<string, string | Redacted.Redacted<string>>): Command
|
|
1241
1414
|
} = dual(
|
|
1242
1415
|
2,
|
|
1243
|
-
(self: Command, env: Record<string, string
|
|
1416
|
+
(self: Command, env: Record<string, string | Redacted.Redacted<string>>): Command => {
|
|
1244
1417
|
switch (self._tag) {
|
|
1245
1418
|
case "StandardCommand": {
|
|
1246
1419
|
const nextEnv = self.options.env === undefined
|
|
@@ -1290,188 +1463,36 @@ export const fdName = (fd: number): string => `fd${fd}`
|
|
|
1290
1463
|
// Template Parsing
|
|
1291
1464
|
// =============================================================================
|
|
1292
1465
|
|
|
1293
|
-
const parseTemplates = (
|
|
1294
|
-
templates: TemplateStringsArray,
|
|
1295
|
-
expressions: ReadonlyArray<TemplateExpression>
|
|
1296
|
-
): ReadonlyArray<string> => {
|
|
1297
|
-
let tokens: ReadonlyArray<string> = []
|
|
1298
|
-
for (const [index, template] of templates.entries()) {
|
|
1299
|
-
tokens = parseTemplate(templates, expressions, tokens, template, index)
|
|
1300
|
-
}
|
|
1301
|
-
return tokens
|
|
1302
|
-
}
|
|
1303
|
-
|
|
1304
1466
|
const parseTemplate = (
|
|
1305
1467
|
templates: TemplateStringsArray,
|
|
1306
|
-
expressions: ReadonlyArray<TemplateExpression
|
|
1307
|
-
|
|
1308
|
-
template
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
throw new Error(`Invalid backslash sequence: ${templates.raw[index]}`)
|
|
1315
|
-
}
|
|
1316
|
-
|
|
1317
|
-
const { hasLeadingWhitespace, hasTrailingWhitespace, tokens } = splitByWhitespaces(template, rawTemplate)
|
|
1318
|
-
const nextTokens = concatTokens(prevTokens, tokens, hasLeadingWhitespace)
|
|
1319
|
-
|
|
1320
|
-
if (index === expressions.length) {
|
|
1321
|
-
return nextTokens
|
|
1322
|
-
}
|
|
1323
|
-
|
|
1324
|
-
const expression = expressions[index]
|
|
1325
|
-
const expressionTokens = Array.isArray(expression)
|
|
1326
|
-
? expression.map((expression: TemplateExpressionItem) => parseExpression(expression))
|
|
1327
|
-
: [parseExpression(expression as TemplateExpressionItem)]
|
|
1328
|
-
|
|
1329
|
-
return concatTokens(nextTokens, expressionTokens, hasTrailingWhitespace)
|
|
1330
|
-
}
|
|
1331
|
-
|
|
1332
|
-
/**
|
|
1333
|
-
* Convert valid expressions defined in a template string command (i.e. using
|
|
1334
|
-
* `${expression}` into strings.
|
|
1335
|
-
*/
|
|
1336
|
-
const parseExpression = (expression: TemplateExpression): string => {
|
|
1337
|
-
const type = typeof expression
|
|
1338
|
-
if (type === "string") {
|
|
1339
|
-
return expression as string // Return strings directly
|
|
1468
|
+
expressions: ReadonlyArray<CommandLine.TemplateExpression>
|
|
1469
|
+
): [command: string, args: Array<CommandLine.Word>] => {
|
|
1470
|
+
const [program = "", ...args] = Result.getOrThrow(CommandLine.template(templates, ...expressions))
|
|
1471
|
+
if (typeof program !== "string") {
|
|
1472
|
+
throw new CommandLine.CommandLineError({
|
|
1473
|
+
reason: "InvalidArgument",
|
|
1474
|
+
message: "The program name of a command cannot be Redacted"
|
|
1475
|
+
})
|
|
1340
1476
|
}
|
|
1341
|
-
return
|
|
1477
|
+
return [program, args]
|
|
1342
1478
|
}
|
|
1343
1479
|
|
|
1344
|
-
const
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
/**
|
|
1354
|
-
* Splits a template string by whitespace while also properly handling escape
|
|
1355
|
-
* sequences.
|
|
1356
|
-
*
|
|
1357
|
-
* As an example, let's review the following valid commands:
|
|
1358
|
-
*
|
|
1359
|
-
* ```ts
|
|
1360
|
-
* ChildProcess.exec`echo foo\n bar`
|
|
1361
|
-
* // We should run `["echo", "foo\n", "bar"]`
|
|
1362
|
-
*
|
|
1363
|
-
* ChildProcess.exec`echo foo
|
|
1364
|
-
* bar`
|
|
1365
|
-
* // We should run `["echo", "foo", "bar]`
|
|
1366
|
-
* ```
|
|
1367
|
-
*
|
|
1368
|
-
* The problem is that when we evaluate the template string for both of the above
|
|
1369
|
-
* commands, we will end up with the same string "echo foo\n bar".
|
|
1370
|
-
*
|
|
1371
|
-
* What we really want is to include the escaped character in the arguments for
|
|
1372
|
-
* the first command, since it was written explicitly by the user.
|
|
1373
|
-
*
|
|
1374
|
-
* This is why also having access to the raw template string is useful - in a
|
|
1375
|
-
* template string, there are two representations of the same string:
|
|
1376
|
-
* 1. `template` - The processed string (escape sequences are evaluated).
|
|
1377
|
-
* 2. `template.raw` - The raw string (escape sequences are literal).
|
|
1378
|
-
*/
|
|
1379
|
-
const splitByWhitespaces = (template: string, rawTemplate: string): {
|
|
1380
|
-
readonly tokens: ReadonlyArray<string>
|
|
1381
|
-
readonly hasLeadingWhitespace: boolean
|
|
1382
|
-
readonly hasTrailingWhitespace: boolean
|
|
1383
|
-
} => {
|
|
1384
|
-
if (rawTemplate.length === 0) {
|
|
1385
|
-
return {
|
|
1386
|
-
tokens: [],
|
|
1387
|
-
hasLeadingWhitespace: false,
|
|
1388
|
-
hasTrailingWhitespace: false
|
|
1389
|
-
}
|
|
1390
|
-
}
|
|
1391
|
-
|
|
1392
|
-
const hasLeadingWhitespace = DELIMITERS.has(rawTemplate[0])
|
|
1393
|
-
const tokens: Array<string> = []
|
|
1394
|
-
|
|
1395
|
-
// Given that escape sequences will have different lengths in the template
|
|
1396
|
-
// versus the raw template, we must maintain two indices:
|
|
1397
|
-
// - One for the index into the template string
|
|
1398
|
-
// - One for the index into the raw template string
|
|
1399
|
-
// We also maintain the current cursor position for where we are in the template
|
|
1400
|
-
let templateCursor = 0
|
|
1401
|
-
for (
|
|
1402
|
-
let templateIndex = 0, rawIndex = 0;
|
|
1403
|
-
templateIndex < template.length;
|
|
1404
|
-
templateIndex += 1, rawIndex += 1
|
|
1405
|
-
) {
|
|
1406
|
-
// Use the raw template character to check for actual whitespace
|
|
1407
|
-
const rawCharacter = rawTemplate[rawIndex]
|
|
1408
|
-
|
|
1409
|
-
if (DELIMITERS.has(rawCharacter)) {
|
|
1410
|
-
// Whitespace found, extract token from template if necessary
|
|
1411
|
-
if (templateCursor !== templateIndex) {
|
|
1412
|
-
tokens.push(template.slice(templateCursor, templateIndex))
|
|
1413
|
-
}
|
|
1414
|
-
// Advance the template start index to the current position
|
|
1415
|
-
templateCursor = templateIndex + 1
|
|
1416
|
-
} else if (rawCharacter === "\\") {
|
|
1417
|
-
// Escape sequence detected, check the next raw character
|
|
1418
|
-
const nextRawCharacter = rawTemplate[rawIndex + 1]
|
|
1419
|
-
|
|
1420
|
-
if (nextRawCharacter === "\n") {
|
|
1421
|
-
// Handle `\` character followed by a newline (i.e. a line continuation) by:
|
|
1422
|
-
// - Reversing the template index (backslash-newline is erased in template)
|
|
1423
|
-
// - Advancing the raw template index past the line continuation
|
|
1424
|
-
templateIndex -= 1
|
|
1425
|
-
rawIndex += 1
|
|
1426
|
-
} else if (nextRawCharacter === "u" && rawTemplate[rawIndex + 2] === "{") {
|
|
1427
|
-
// Handle variable-length unicode escape sequences (i.e. `\u{1F600}`) by:
|
|
1428
|
-
// - Advancing the template index an extra code unit for astral code points
|
|
1429
|
-
// - Advancing the raw template index past the unicode escape sequence
|
|
1430
|
-
const end = rawTemplate.indexOf("}", rawIndex + 3)
|
|
1431
|
-
if (parseInt(rawTemplate.slice(rawIndex + 3, end), 16) > 0xffff) {
|
|
1432
|
-
templateIndex += 1
|
|
1433
|
-
}
|
|
1434
|
-
rawIndex = end
|
|
1435
|
-
} else {
|
|
1436
|
-
// Advance raw template index past fixed-length escape sequences:
|
|
1437
|
-
// - \n → 2 chars (backslash + n)
|
|
1438
|
-
// - \t → 2 chars (backslash + t)
|
|
1439
|
-
// - \xHH → 4 chars (backslash + x + H + H)
|
|
1440
|
-
// - \uHHHH → 6 chars (backslash + u + H + H + H + H)
|
|
1441
|
-
rawIndex += ESCAPE_LENGTH[nextRawCharacter] ?? 1
|
|
1442
|
-
}
|
|
1443
|
-
}
|
|
1444
|
-
}
|
|
1445
|
-
|
|
1446
|
-
// Trailing whitespace only exists if the template cursor is equivalent to the
|
|
1447
|
-
// length of the template
|
|
1448
|
-
const hasTrailingWhitespace = templateCursor === template.length
|
|
1449
|
-
|
|
1450
|
-
// If we did not end with trailing whitespace, ensure the final token is added
|
|
1451
|
-
if (!hasTrailingWhitespace) {
|
|
1452
|
-
tokens.push(template.slice(templateCursor))
|
|
1480
|
+
const shellScript = (
|
|
1481
|
+
templates: TemplateStringsArray,
|
|
1482
|
+
expressions: ReadonlyArray<CommandLine.TemplateExpression>
|
|
1483
|
+
): string => {
|
|
1484
|
+
if (expressions.length > 0) {
|
|
1485
|
+
throw new CommandLine.CommandLineError({
|
|
1486
|
+
reason: "UnsupportedSyntax",
|
|
1487
|
+
message: "A shell template cannot interpolate values; build the script with CommandLine.quote"
|
|
1488
|
+
})
|
|
1453
1489
|
}
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1490
|
+
const script = templates[0]
|
|
1491
|
+
if (script === undefined) {
|
|
1492
|
+
throw new CommandLine.CommandLineError({
|
|
1493
|
+
reason: "InvalidEscape",
|
|
1494
|
+
message: "Template part 0 contains an invalid escape sequence"
|
|
1495
|
+
})
|
|
1459
1496
|
}
|
|
1497
|
+
return script
|
|
1460
1498
|
}
|
|
1461
|
-
|
|
1462
|
-
/**
|
|
1463
|
-
* Concatenates two separate sets of string tokens together.
|
|
1464
|
-
*
|
|
1465
|
-
* If either set is empty or `isSeparated=false`, the last element of `prevTokens`
|
|
1466
|
-
* and the first element of `nextTokens` will be joined into a single token.
|
|
1467
|
-
*/
|
|
1468
|
-
const concatTokens = (
|
|
1469
|
-
prevTokens: ReadonlyArray<string>,
|
|
1470
|
-
nextTokens: ReadonlyArray<string>,
|
|
1471
|
-
isSeparated: boolean
|
|
1472
|
-
): ReadonlyArray<string> =>
|
|
1473
|
-
isSeparated || prevTokens.length === 0 || nextTokens.length === 0
|
|
1474
|
-
// Keep the previous and next tokens separate from one another
|
|
1475
|
-
? [...prevTokens, ...nextTokens]
|
|
1476
|
-
// Join the last token from the previous set and the first token from the next set
|
|
1477
|
-
: [...prevTokens.slice(0, -1), `${prevTokens.at(-1)}${nextTokens.at(0)}`, ...nextTokens.slice(1)]
|