effect 4.0.5 → 4.0.6
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/ai-docs/package.json +1 -1
- package/ai-docs/src/06_schedule/10_schedules.ts +5 -4
- package/ai-docs/tsconfig.json +3 -1
- package/dist/Array.d.ts +117 -52
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +41 -20
- package/dist/Array.js.map +1 -1
- package/dist/Bytes.d.ts +79 -0
- package/dist/Bytes.d.ts.map +1 -0
- package/dist/Bytes.js +109 -0
- package/dist/Bytes.js.map +1 -0
- package/dist/Channel.d.ts +181 -13
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +125 -30
- package/dist/Channel.js.map +1 -1
- package/dist/ChannelSchema.d.ts.map +1 -1
- package/dist/ChannelSchema.js.map +1 -1
- package/dist/Chunk.d.ts +39 -21
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +26 -17
- package/dist/Chunk.js.map +1 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +8 -3
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +2 -1
- package/dist/ConfigProvider.js.map +1 -1
- package/dist/Cron.d.ts +2 -2
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +6 -3
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +56 -16
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +487 -163
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +203 -37
- package/dist/Effect.js.map +1 -1
- package/dist/Equivalence.d.ts +2 -1
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +12 -8
- package/dist/Equivalence.js.map +1 -1
- package/dist/Exit.d.ts +24 -9
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js +8 -3
- package/dist/Exit.js.map +1 -1
- package/dist/FiberHandle.d.ts +2 -0
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +9 -4
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +2 -0
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +5 -2
- package/dist/FiberMap.js.map +1 -1
- package/dist/FileSystem.d.ts +5 -0
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +3 -0
- package/dist/FileSystem.js.map +1 -1
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js.map +1 -1
- package/dist/HashSet.d.ts.map +1 -1
- package/dist/HashSet.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +18 -17
- package/dist/Iterable.js.map +1 -1
- package/dist/JsonSchema.d.ts +9 -3
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +19 -3
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +2 -2
- package/dist/Layer.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +19 -1
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +62 -6
- package/dist/ManagedRuntime.js.map +1 -1
- package/dist/Metric.d.ts +132 -0
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +197 -25
- package/dist/Metric.js.map +1 -1
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js.map +1 -1
- package/dist/Number.js +2 -2
- package/dist/Number.js.map +1 -1
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js.map +1 -1
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +8 -1
- package/dist/Path.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +12 -7
- package/dist/PubSub.js.map +1 -1
- package/dist/Queue.d.ts +4 -1
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +4 -1
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +1 -1
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +12 -7
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +9 -6
- package/dist/RcMap.js.map +1 -1
- package/dist/Record.d.ts +51 -0
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +17 -0
- package/dist/Record.js.map +1 -1
- package/dist/Ref.d.ts.map +1 -1
- package/dist/Ref.js.map +1 -1
- package/dist/References.d.ts +5 -4
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +5 -4
- package/dist/References.js.map +1 -1
- package/dist/RequestResolver.d.ts +31 -1
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +39 -4
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Resource.js +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/Runtime.d.ts +3 -3
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +18 -15
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +384 -332
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +333 -19
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +5 -5
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +24 -8
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +8 -3
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +15 -5
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +4 -4
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +29 -51
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +56 -1
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +18 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +1 -1
- package/dist/SchemaTransformation.js +1 -1
- package/dist/Scope.d.ts +12 -2
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +5 -0
- package/dist/Scope.js.map +1 -1
- package/dist/ScopedCache.d.ts +10 -7
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +9 -5
- package/dist/ScopedCache.js.map +1 -1
- package/dist/SemVer.d.ts +1196 -0
- package/dist/SemVer.d.ts.map +1 -0
- package/dist/SemVer.js +756 -0
- package/dist/SemVer.js.map +1 -0
- package/dist/SemVerRange.d.ts +559 -0
- package/dist/SemVerRange.d.ts.map +1 -0
- package/dist/SemVerRange.js +551 -0
- package/dist/SemVerRange.js.map +1 -0
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +6 -2
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts +235 -8
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +145 -60
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +4 -2
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +8 -6
- package/dist/String.js.map +1 -1
- package/dist/TextDiff.d.ts +399 -0
- package/dist/TextDiff.d.ts.map +1 -0
- package/dist/TextDiff.js +634 -0
- package/dist/TextDiff.js.map +1 -0
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js.map +1 -1
- package/dist/ai/AiError.d.ts +68 -4
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +50 -2
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Chat.d.ts +1 -2
- package/dist/ai/Chat.d.ts.map +1 -1
- package/dist/ai/Chat.js +6 -3
- package/dist/ai/Chat.js.map +1 -1
- package/dist/ai/Decision.d.ts +46 -1
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +129 -11
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +182 -94
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/EmbeddingModel.d.ts +10 -0
- package/dist/ai/EmbeddingModel.d.ts.map +1 -1
- package/dist/ai/EmbeddingModel.js +21 -7
- package/dist/ai/EmbeddingModel.js.map +1 -1
- package/dist/ai/McpClient.d.ts +289 -0
- package/dist/ai/McpClient.d.ts.map +1 -0
- package/dist/ai/McpClient.js +819 -0
- package/dist/ai/McpClient.js.map +1 -0
- package/dist/ai/McpClientError.d.ts +254 -0
- package/dist/ai/McpClientError.d.ts.map +1 -0
- package/dist/ai/McpClientError.js +260 -0
- package/dist/ai/McpClientError.js.map +1 -0
- package/dist/ai/McpProtocol.d.ts +2 -2
- package/dist/ai/McpProtocol.d.ts.map +1 -1
- package/dist/ai/McpSchema.d.ts +368 -235
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +94 -24
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +25 -22
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts +22 -20
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +23 -1
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +147 -3
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +35 -37
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +12 -4
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/Toolkit.d.ts +48 -1
- package/dist/ai/Toolkit.d.ts.map +1 -1
- package/dist/ai/Toolkit.js +65 -12
- package/dist/ai/Toolkit.js.map +1 -1
- package/dist/ai/index.d.ts +10 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +10 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +16 -2
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +3 -4
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
- package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
- package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
- package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
- package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
- package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
- package/dist/cli/CliError.d.ts +42 -2
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +44 -5
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/Command.d.ts +286 -2
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +107 -6
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +5 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +115 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +56 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +3 -3
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Param.d.ts +107 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +56 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +84 -0
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
- package/dist/cli/TerminalCapabilities.js +122 -0
- package/dist/cli/TerminalCapabilities.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/internal/command.d.ts +2 -1
- package/dist/cli/internal/command.d.ts.map +1 -1
- package/dist/cli/internal/command.js +5 -2
- package/dist/cli/internal/command.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +4 -3
- package/dist/cli/internal/completions/bash.js.map +1 -1
- package/dist/cli/internal/completions/descriptor.js +9 -1
- package/dist/cli/internal/completions/descriptor.js.map +1 -1
- package/dist/cli/internal/completions/fish.js +10 -8
- package/dist/cli/internal/completions/fish.js.map +1 -1
- package/dist/cli/internal/completions/powershell.js +18 -9
- package/dist/cli/internal/completions/powershell.js.map +1 -1
- package/dist/cli/internal/completions/zsh.js +8 -5
- package/dist/cli/internal/completions/zsh.js.map +1 -1
- package/dist/cli/internal/formatter.d.ts +2 -0
- package/dist/cli/internal/formatter.d.ts.map +1 -0
- package/dist/cli/internal/formatter.js +15 -0
- package/dist/cli/internal/formatter.js.map +1 -0
- package/dist/cli/internal/lexer.js +24 -10
- package/dist/cli/internal/lexer.js.map +1 -1
- package/dist/cli/internal/parser.js +24 -12
- package/dist/cli/internal/parser.js.map +1 -1
- package/dist/cluster/ClusterCron.d.ts +29 -1
- package/dist/cluster/ClusterCron.d.ts.map +1 -1
- package/dist/cluster/ClusterCron.js +64 -32
- package/dist/cluster/ClusterCron.js.map +1 -1
- package/dist/cluster/ClusterMetrics.d.ts +143 -7
- package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
- package/dist/cluster/ClusterMetrics.js +151 -7
- package/dist/cluster/ClusterMetrics.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +37 -11
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Entity.d.ts +2 -0
- package/dist/cluster/Entity.d.ts.map +1 -1
- package/dist/cluster/Entity.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +21 -0
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +54 -15
- package/dist/cluster/Runners.js.map +1 -1
- package/dist/cluster/Sharding.d.ts +1 -0
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +95 -32
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +20 -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/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +40 -50
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +10 -4
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +65 -8
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/devtools/DevTools.d.ts +3 -2
- package/dist/devtools/DevTools.d.ts.map +1 -1
- package/dist/devtools/DevTools.js +3 -2
- package/dist/devtools/DevTools.js.map +1 -1
- package/dist/devtools/DevToolsClient.d.ts +11 -0
- package/dist/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/devtools/DevToolsClient.js +31 -4
- package/dist/devtools/DevToolsClient.js.map +1 -1
- package/dist/encoding/Base64Url.d.ts +29 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +29 -0
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Ini.d.ts.map +1 -1
- package/dist/encoding/Ini.js +3 -0
- package/dist/encoding/Ini.js.map +1 -1
- package/dist/encoding/JsonArray.d.ts +270 -0
- package/dist/encoding/JsonArray.d.ts.map +1 -0
- package/dist/encoding/JsonArray.js +691 -0
- package/dist/encoding/JsonArray.js.map +1 -0
- package/dist/encoding/Ndjson.d.ts +43 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +169 -18
- package/dist/encoding/Ndjson.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts +9 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +12 -19
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Tar.d.ts +309 -0
- package/dist/encoding/Tar.d.ts.map +1 -0
- package/dist/encoding/Tar.js +1182 -0
- package/dist/encoding/Tar.js.map +1 -0
- package/dist/encoding/Toml.js +3 -3
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Xml.d.ts +464 -0
- package/dist/encoding/Xml.d.ts.map +1 -0
- package/dist/encoding/Xml.js +1619 -0
- package/dist/encoding/Xml.js.map +1 -0
- package/dist/encoding/Yaml.d.ts +6 -2
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +97 -34
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/Zip.d.ts +413 -0
- package/dist/encoding/Zip.d.ts.map +1 -0
- package/dist/encoding/Zip.js +1255 -0
- package/dist/encoding/Zip.js.map +1 -0
- package/dist/encoding/index.d.ts +20 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +20 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts +90 -5
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +488 -228
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +180 -12
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +394 -146
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +36 -30
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +97 -38
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +74 -34
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +45 -11
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +45 -8
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +51 -14
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +46 -3
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +119 -19
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +97 -70
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +288 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -0
- package/dist/eventlog/EventRow.js +435 -0
- package/dist/eventlog/EventRow.js.map +1 -0
- package/dist/eventlog/SqlEventJournal.d.ts +18 -18
- package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +387 -159
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/index.d.ts +5 -0
- package/dist/eventlog/index.d.ts.map +1 -1
- package/dist/eventlog/index.js +5 -0
- package/dist/eventlog/index.js.map +1 -1
- package/dist/eventlog/internal/conflicts.d.ts +47 -0
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
- package/dist/eventlog/internal/conflicts.js +92 -0
- package/dist/eventlog/internal/conflicts.js.map +1 -0
- package/dist/graphql/GraphQLClientError.d.ts +2 -2
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +4 -18
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +12 -9
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +4 -3
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/graphql/GraphQLResolver.d.ts +2 -0
- package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
- package/dist/graphql/GraphQLResolver.js +74 -32
- package/dist/graphql/GraphQLResolver.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +8 -1
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +51 -4
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/FindMyWay/internal/router.js +10 -0
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/Headers.d.ts +227 -0
- package/dist/http/Headers.d.ts.map +1 -1
- package/dist/http/Headers.js +261 -0
- package/dist/http/Headers.js.map +1 -1
- package/dist/http/HttpClient.d.ts +93 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +55 -16
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +127 -3
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +44 -2
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts +53 -0
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +47 -0
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpEffect.d.ts +6 -2
- package/dist/http/HttpEffect.d.ts.map +1 -1
- package/dist/http/HttpEffect.js +21 -17
- package/dist/http/HttpEffect.js.map +1 -1
- package/dist/http/HttpIncomingMessage.d.ts +2 -1
- package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/http/HttpIncomingMessage.js +3 -23
- package/dist/http/HttpIncomingMessage.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts +119 -2
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +159 -13
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +7 -2
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerError.d.ts +5 -2
- package/dist/http/HttpServerError.d.ts.map +1 -1
- package/dist/http/HttpServerError.js +5 -3
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +25 -5
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +36 -10
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts +17 -8
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +37 -21
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpStaticServer.d.ts +0 -12
- package/dist/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +21 -7
- package/dist/http/HttpStaticServer.js.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.js +87 -5
- package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
- package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/headers.js +4 -12
- package/dist/http/MultipartParser/internal/headers.js.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.js +6 -27
- package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
- package/dist/http/Url.d.ts.map +1 -1
- package/dist/http/Url.js +6 -1
- package/dist/http/Url.js.map +1 -1
- package/dist/http/internal/decompression.js +17 -11
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/lazyStream.d.ts +2 -0
- package/dist/http/internal/lazyStream.d.ts.map +1 -0
- package/dist/http/internal/lazyStream.js +18 -0
- package/dist/http/internal/lazyStream.js.map +1 -0
- package/dist/http/internal/requestState.d.ts +2 -0
- package/dist/http/internal/requestState.d.ts.map +1 -0
- package/dist/http/internal/requestState.js +28 -0
- package/dist/http/internal/requestState.js.map +1 -0
- package/dist/http/internal/webResponse.d.ts +2 -0
- package/dist/http/internal/webResponse.d.ts.map +1 -0
- package/dist/http/internal/webResponse.js +12 -0
- package/dist/http/internal/webResponse.js.map +1 -0
- package/dist/http-api/HttpApi.js +1 -1
- 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 +121 -18
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +29 -4
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +83 -23
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +55 -29
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +49 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +58 -0
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +38 -12
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiScalar.d.ts +2 -1
- package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
- package/dist/http-api/HttpApiScalar.js +6 -3
- package/dist/http-api/HttpApiScalar.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +191 -9
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +137 -4
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/http-api/HttpApiSwagger.d.ts +5 -0
- package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
- package/dist/http-api/HttpApiSwagger.js +14 -4
- package/dist/http-api/HttpApiSwagger.js.map +1 -1
- package/dist/http-api/HttpApiTest.d.ts +13 -2
- package/dist/http-api/HttpApiTest.d.ts.map +1 -1
- package/dist/http-api/HttpApiTest.js +30 -9
- package/dist/http-api/HttpApiTest.js.map +1 -1
- package/dist/http-api/OpenApi.d.ts +17 -3
- package/dist/http-api/OpenApi.d.ts.map +1 -1
- package/dist/http-api/OpenApi.js +57 -32
- package/dist/http-api/OpenApi.js.map +1 -1
- package/dist/http-api/internal/path.js +35 -10
- package/dist/http-api/internal/path.js.map +1 -1
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/core.js +1 -1
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +19 -7
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +85 -74
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/hashMap.js +2 -2
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/hydration.d.ts +2 -0
- package/dist/internal/hydration.d.ts.map +1 -0
- package/dist/internal/hydration.js +15 -0
- package/dist/internal/hydration.js.map +1 -0
- package/dist/internal/inflate.d.ts +2 -0
- package/dist/internal/inflate.d.ts.map +1 -0
- package/dist/internal/inflate.js +680 -0
- package/dist/internal/inflate.js.map +1 -0
- package/dist/internal/record.js +6 -0
- package/dist/internal/record.js.map +1 -1
- package/dist/internal/request.js +20 -7
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schedule.js +17 -22
- package/dist/internal/schedule.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.js +136 -126
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/interpreter.js +51 -36
- package/dist/internal/schema/interpreter.js.map +1 -1
- package/dist/internal/schema/standardSchema.js +34 -33
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +7 -2
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +86 -1
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toFormatter.js +5 -5
- package/dist/internal/schema/toFormatter.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +60 -38
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/trie.js +1 -3
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/uuid.js +7 -3
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +2 -8
- package/dist/net/NetAddress.js.map +1 -1
- package/dist/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/observability/OtlpExporter.js +5 -12
- package/dist/observability/OtlpExporter.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +5 -3
- package/dist/observability/OtlpMetrics.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +3 -1
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -4
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/observability/OtlpSerialization.d.ts +5 -0
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +14 -3
- package/dist/observability/OtlpSerialization.js.map +1 -1
- package/dist/observability/internal/protobuf.d.ts +0 -9
- package/dist/observability/internal/protobuf.d.ts.map +1 -1
- package/dist/observability/internal/protobuf.js +2 -10
- package/dist/observability/internal/protobuf.js.map +1 -1
- package/dist/persistence/PersistedCache.d.ts.map +1 -1
- package/dist/persistence/PersistedCache.js +1 -1
- package/dist/persistence/PersistedCache.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +6 -2
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +162 -84
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +28 -0
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +36 -8
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +8 -12
- package/dist/persistence/RateLimiter.js.map +1 -1
- package/dist/persistence/UserDirectories.d.ts +129 -0
- package/dist/persistence/UserDirectories.d.ts.map +1 -0
- package/dist/persistence/UserDirectories.js +178 -0
- package/dist/persistence/UserDirectories.js.map +1 -0
- 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 +2 -1
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/reactivity/AsyncResult.js +1 -1
- package/dist/reactivity/AsyncResult.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +69 -30
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +40 -15
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomHttpApi.d.ts +5 -5
- package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/reactivity/AtomHttpApi.js +1 -1
- package/dist/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/reactivity/AtomRegistry.d.ts +2 -2
- package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
- package/dist/reactivity/AtomRegistry.js +44 -9
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/reactivity/AtomRpc.d.ts +3 -3
- package/dist/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/reactivity/AtomRpc.js +1 -1
- package/dist/reactivity/AtomRpc.js.map +1 -1
- package/dist/reactivity/Hydration.d.ts.map +1 -1
- package/dist/reactivity/Hydration.js +46 -12
- package/dist/reactivity/Hydration.js.map +1 -1
- package/dist/reactivity/Reactivity.d.ts +71 -7
- package/dist/reactivity/Reactivity.d.ts.map +1 -1
- package/dist/reactivity/Reactivity.js +21 -12
- package/dist/reactivity/Reactivity.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +18 -0
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js +20 -0
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +26 -2
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +196 -60
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +15 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +21 -5
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +9 -18
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +1 -1
- package/dist/schema/VariantSchema.d.ts +22 -3
- package/dist/schema/VariantSchema.d.ts.map +1 -1
- package/dist/schema/VariantSchema.js +32 -18
- package/dist/schema/VariantSchema.js.map +1 -1
- package/dist/socket/Socket.d.ts +23 -1
- package/dist/socket/Socket.d.ts.map +1 -1
- package/dist/socket/Socket.js +36 -3
- package/dist/socket/Socket.js.map +1 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +15 -3
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +143 -5
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +148 -27
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +9 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +9 -0
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +3 -1
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +24 -5
- package/dist/sql/Statement.js.map +1 -1
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +4 -2
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +7 -1
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js +9 -3
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +18 -4
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +13 -3
- package/src/Array.ts +128 -55
- package/src/Bytes.ts +111 -0
- package/src/Channel.ts +263 -436
- package/src/ChannelSchema.ts +1 -49
- package/src/Chunk.ts +55 -61
- package/src/Config.ts +12 -86
- package/src/ConfigProvider.ts +2 -1
- package/src/Cron.ts +6 -3
- package/src/Duration.ts +66 -16
- package/src/Effect.ts +502 -167
- package/src/Equivalence.ts +7 -4
- package/src/Exit.ts +24 -9
- package/src/FiberHandle.ts +10 -9
- package/src/FiberMap.ts +13 -66
- package/src/FileSystem.ts +10 -0
- package/src/Graph.ts +171 -1263
- package/src/HashSet.ts +0 -60
- package/src/Iterable.ts +15 -14
- package/src/JsonSchema.ts +28 -3
- package/src/Layer.ts +2 -2
- package/src/ManagedRuntime.ts +72 -6
- package/src/Metric.ts +249 -507
- package/src/MutableHashMap.ts +4 -473
- package/src/Number.ts +2 -2
- package/src/Optic.ts +17 -332
- package/src/Path.ts +9 -1
- package/src/PubSub.ts +12 -7
- package/src/Queue.ts +5 -37
- package/src/Random.ts +1 -1
- package/src/RcMap.ts +14 -8
- package/src/Record.ts +51 -0
- package/src/Ref.ts +7 -104
- package/src/References.ts +5 -4
- package/src/RequestResolver.ts +46 -87
- package/src/Resource.ts +1 -1
- package/src/Runtime.ts +19 -18
- package/src/Schedule.ts +2 -94
- package/src/Schema.ts +591 -356
- package/src/SchemaAST.ts +20 -9
- package/src/SchemaGetter.ts +22 -5
- package/src/SchemaIssue.ts +44 -53
- package/src/SchemaRepresentation.ts +64 -1
- package/src/SchemaTransformation.ts +1 -1
- package/src/Scope.ts +12 -2
- package/src/ScopedCache.ts +17 -142
- package/src/SemVer.ts +1528 -0
- package/src/SemVerRange.ts +883 -0
- package/src/Sink.ts +6 -2
- package/src/Stream.ts +334 -1011
- package/src/String.ts +8 -8
- package/src/TextDiff.ts +766 -0
- package/src/TxHashMap.ts +1 -103
- package/src/TxHashSet.ts +48 -753
- package/src/ai/AiError.ts +66 -4
- package/src/ai/Chat.ts +10 -5
- package/src/ai/Decision.ts +49 -1
- package/src/ai/DecisionModel.ts +264 -108
- package/src/ai/EmbeddingModel.ts +25 -13
- package/src/ai/McpClient.ts +1211 -0
- package/src/ai/McpClientError.ts +329 -0
- package/src/ai/McpProtocol.ts +2 -2
- package/src/ai/McpSchema.ts +153 -35
- package/src/ai/McpServer.ts +217 -220
- package/src/ai/Prompt.ts +49 -35
- package/src/ai/Response.ts +195 -65
- package/src/ai/Tool.ts +12 -4
- package/src/ai/Toolkit.ts +78 -10
- package/src/ai/index.ts +12 -0
- package/src/ai/internal/mcpCore.ts +13 -14
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
- package/src/ai/internal/mcpProtocol.ts +22 -2
- package/src/ai/internal/mcpRuntime.ts +3 -4
- package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
- package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
- package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
- package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
- package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
- package/src/cli/CliError.ts +49 -4
- package/src/cli/Command.ts +316 -9
- package/src/cli/Completions.ts +5 -0
- package/src/cli/Flag.ts +117 -0
- package/src/cli/GlobalFlag.ts +3 -3
- package/src/cli/Param.ts +122 -0
- package/src/cli/TerminalCapabilities.ts +156 -0
- package/src/cli/index.ts +6 -0
- package/src/cli/internal/command.ts +8 -3
- package/src/cli/internal/completions/bash.ts +4 -3
- package/src/cli/internal/completions/descriptor.ts +11 -1
- package/src/cli/internal/completions/fish.ts +10 -8
- package/src/cli/internal/completions/powershell.ts +23 -14
- package/src/cli/internal/completions/zsh.ts +8 -5
- package/src/cli/internal/formatter.ts +18 -0
- package/src/cli/internal/lexer.ts +12 -5
- package/src/cli/internal/parser.ts +31 -11
- package/src/cluster/ClusterCron.ts +94 -35
- package/src/cluster/ClusterMetrics.ts +149 -7
- package/src/cluster/ClusterWorkflowEngine.ts +84 -41
- package/src/cluster/Entity.ts +4 -0
- package/src/cluster/MessageStorage.ts +7 -0
- package/src/cluster/Runners.ts +76 -25
- package/src/cluster/Sharding.ts +118 -38
- package/src/cluster/ShardingConfig.ts +15 -0
- package/src/cluster/SqlMessageStorage.ts +58 -55
- package/src/cluster/SqlRunnerStorage.ts +10 -4
- package/src/cluster/internal/entityManager.ts +80 -10
- package/src/devtools/DevTools.ts +3 -2
- package/src/devtools/DevToolsClient.ts +27 -10
- package/src/encoding/Base64Url.ts +31 -0
- package/src/encoding/Ini.ts +3 -0
- package/src/encoding/JsonArray.ts +849 -0
- package/src/encoding/Ndjson.ts +211 -20
- package/src/encoding/SchemaBinary.ts +14 -48
- package/src/encoding/Tar.ts +1417 -0
- package/src/encoding/Toml.ts +3 -3
- package/src/encoding/Xml.ts +2037 -0
- package/src/encoding/Yaml.ts +108 -36
- package/src/encoding/Zip.ts +1558 -0
- package/src/encoding/index.ts +24 -0
- package/src/eventlog/EventJournal.ts +611 -227
- package/src/eventlog/EventLog.ts +496 -196
- package/src/eventlog/EventLogEncryption.ts +128 -43
- package/src/eventlog/EventLogMessage.ts +62 -11
- package/src/eventlog/EventLogRemote.ts +77 -21
- package/src/eventlog/EventLogServer.ts +162 -20
- package/src/eventlog/EventLogServerEncrypted.ts +121 -80
- package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
- package/src/eventlog/EventRow.ts +706 -0
- package/src/eventlog/SqlEventJournal.ts +453 -173
- package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
- package/src/eventlog/index.ts +6 -0
- package/src/eventlog/internal/conflicts.ts +123 -0
- package/src/graphql/GraphQLClientError.ts +5 -12
- package/src/graphql/GraphQLProtocol.ts +12 -9
- package/src/graphql/GraphQLResolver.ts +90 -239
- package/src/http/FetchHttpClient.ts +56 -6
- package/src/http/FindMyWay/internal/router.ts +11 -0
- package/src/http/Headers.ts +337 -154
- package/src/http/HttpClient.ts +126 -135
- package/src/http/HttpClientRequest.ts +142 -4
- package/src/http/HttpClientResponse.ts +71 -0
- package/src/http/HttpEffect.ts +25 -33
- package/src/http/HttpIncomingMessage.ts +3 -23
- package/src/http/HttpMiddleware.ts +180 -23
- package/src/http/HttpRouter.ts +8 -2
- package/src/http/HttpServerError.ts +6 -3
- package/src/http/HttpServerRequest.ts +71 -12
- package/src/http/HttpServerResponse.ts +49 -23
- package/src/http/HttpStaticServer.ts +25 -9
- package/src/http/MultipartParser/internal/contentType.ts +107 -6
- package/src/http/MultipartParser/internal/headers.ts +4 -16
- package/src/http/MultipartParser/internal/multipart.ts +10 -32
- package/src/http/Url.ts +6 -1
- package/src/http/internal/decompression.ts +26 -17
- package/src/http/internal/lazyStream.ts +25 -0
- package/src/http/internal/requestState.ts +33 -0
- package/src/http/internal/webResponse.ts +20 -0
- package/src/http-api/HttpApi.ts +1 -1
- package/src/http-api/HttpApiBuilder.ts +151 -23
- package/src/http-api/HttpApiClient.ts +158 -30
- package/src/http-api/HttpApiEndpoint.ts +144 -33
- package/src/http-api/HttpApiError.ts +55 -0
- package/src/http-api/HttpApiScalar.ts +4 -3
- package/src/http-api/HttpApiSchema.ts +275 -13
- package/src/http-api/HttpApiSwagger.ts +11 -4
- package/src/http-api/HttpApiTest.ts +33 -9
- package/src/http-api/OpenApi.ts +84 -42
- package/src/http-api/internal/path.ts +40 -12
- package/src/index.ts +24 -0
- package/src/internal/core.ts +1 -1
- package/src/internal/dateTime.ts +20 -7
- package/src/internal/effect.ts +120 -84
- package/src/internal/hashMap.ts +2 -2
- package/src/internal/hydration.ts +15 -0
- package/src/internal/inflate.ts +710 -0
- package/src/internal/record.ts +6 -0
- package/src/internal/request.ts +21 -6
- package/src/internal/schedule.ts +20 -39
- package/src/internal/schema/fromJsonSchemaDocument.ts +262 -193
- package/src/internal/schema/interpreter.ts +58 -45
- package/src/internal/schema/standardSchema.ts +32 -30
- package/src/internal/schema/toCodeDocument.ts +8 -3
- package/src/internal/schema/toCodec.ts +116 -1
- package/src/internal/schema/toFormatter.ts +6 -6
- package/src/internal/schema/toJsonSchemaDocument.ts +69 -39
- package/src/internal/trie.ts +1 -3
- package/src/internal/uuid.ts +15 -10
- package/src/internal/version.ts +1 -1
- package/src/net/NetAddress.ts +2 -9
- package/src/observability/OtlpExporter.ts +5 -12
- package/src/observability/OtlpMetrics.ts +5 -3
- package/src/observability/OtlpResource.ts +16 -6
- package/src/observability/OtlpSerialization.ts +17 -3
- package/src/observability/internal/protobuf.ts +2 -10
- package/src/persistence/PersistedCache.ts +3 -1
- package/src/persistence/PersistedQueue.ts +223 -153
- package/src/persistence/Persistence.ts +64 -30
- package/src/persistence/RateLimiter.ts +18 -21
- package/src/persistence/UserDirectories.ts +273 -0
- package/src/persistence/index.ts +6 -0
- package/src/process/ChildProcess.ts +2 -1
- package/src/reactivity/AsyncResult.ts +4 -38
- package/src/reactivity/Atom.ts +134 -166
- package/src/reactivity/AtomHttpApi.ts +10 -16
- package/src/reactivity/AtomRegistry.ts +50 -29
- package/src/reactivity/AtomRpc.ts +6 -22
- package/src/reactivity/Hydration.ts +53 -12
- package/src/reactivity/Reactivity.ts +97 -39
- package/src/rpc/Rpc.ts +21 -0
- package/src/rpc/RpcClient.ts +279 -103
- package/src/rpc/RpcSerialization.ts +21 -5
- package/src/rpc/RpcServer.ts +11 -20
- package/src/schema/VariantSchema.ts +86 -22
- package/src/socket/Socket.ts +45 -20
- package/src/sql/Migrator.ts +19 -9
- package/src/sql/SqlClient.ts +266 -29
- package/src/sql/SqlResolver.ts +9 -0
- package/src/sql/Statement.ts +35 -8
- package/src/testing/TestClock.ts +4 -1
- package/src/testing/TestSchema.ts +9 -3
- package/src/workflow/WorkflowEngine.ts +34 -10
- package/dist/http/internal/preResponseHandler.d.ts +0 -2
- package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
- package/dist/http/internal/preResponseHandler.js +0 -14
- package/dist/http/internal/preResponseHandler.js.map +0 -1
- package/src/http/internal/preResponseHandler.ts +0 -19
package/src/TextDiff.ts
ADDED
|
@@ -0,0 +1,766 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `TextDiff` module computes edit scripts for arrays and text, applies and
|
|
3
|
+
* inverts them, and formats line differences as unified diffs.
|
|
4
|
+
*
|
|
5
|
+
* Scripts are computed with Myers' O(ND) algorithm in linear space, after
|
|
6
|
+
* trimming common prefixes and suffixes. Scripts are minimal unless the
|
|
7
|
+
* optional `maxEdits` search cap is exceeded. Word diffs, semantic cleanup
|
|
8
|
+
* and collaborative editing protocols are out of scope.
|
|
9
|
+
*
|
|
10
|
+
* @stability experimental
|
|
11
|
+
* @since 4.0.6
|
|
12
|
+
*/
|
|
13
|
+
import * as Data from "./Data.ts"
|
|
14
|
+
import * as Equal from "./Equal.ts"
|
|
15
|
+
import { hasProperty } from "./Predicate.ts"
|
|
16
|
+
import * as Result from "./Result.ts"
|
|
17
|
+
|
|
18
|
+
const TextDiffErrorTypeId = "~effect/TextDiff/TextDiffError"
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* One run of an edit script.
|
|
22
|
+
*
|
|
23
|
+
* **Details**
|
|
24
|
+
*
|
|
25
|
+
* `Equal` runs carry items kept from `before`, `Delete` runs carry items
|
|
26
|
+
* removed from `before`, and `Insert` runs carry items added from `after`.
|
|
27
|
+
* Scripts produced by this module never contain empty runs or two adjacent
|
|
28
|
+
* runs with the same tag, and within each change the `Delete` run comes before
|
|
29
|
+
* the `Insert` run.
|
|
30
|
+
*
|
|
31
|
+
* @see {@link diff} to compute an edit script
|
|
32
|
+
* @stability experimental
|
|
33
|
+
* @category models
|
|
34
|
+
* @since 4.0.6
|
|
35
|
+
*/
|
|
36
|
+
export type Edit<A> = EditEqual<A> | EditInsert<A> | EditDelete<A>
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Run of items present in both sequences.
|
|
40
|
+
*
|
|
41
|
+
* @stability experimental
|
|
42
|
+
* @category models
|
|
43
|
+
* @since 4.0.6
|
|
44
|
+
*/
|
|
45
|
+
export interface EditEqual<A> {
|
|
46
|
+
readonly _tag: "Equal"
|
|
47
|
+
readonly items: ReadonlyArray<A>
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Run of items present only in the `after` sequence.
|
|
52
|
+
*
|
|
53
|
+
* @stability experimental
|
|
54
|
+
* @category models
|
|
55
|
+
* @since 4.0.6
|
|
56
|
+
*/
|
|
57
|
+
export interface EditInsert<A> {
|
|
58
|
+
readonly _tag: "Insert"
|
|
59
|
+
readonly items: ReadonlyArray<A>
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Run of items present only in the `before` sequence.
|
|
64
|
+
*
|
|
65
|
+
* @stability experimental
|
|
66
|
+
* @category models
|
|
67
|
+
* @since 4.0.6
|
|
68
|
+
*/
|
|
69
|
+
export interface EditDelete<A> {
|
|
70
|
+
readonly _tag: "Delete"
|
|
71
|
+
readonly items: ReadonlyArray<A>
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Error returned when an edit script does not fit the input it is applied to.
|
|
76
|
+
*
|
|
77
|
+
* **Example** (Rejecting a script made for other input)
|
|
78
|
+
*
|
|
79
|
+
* ```ts import.meta.vitest
|
|
80
|
+
* import { Result, TextDiff } from "effect"
|
|
81
|
+
*
|
|
82
|
+
* const edits = TextDiff.diff([1, 2], [1])
|
|
83
|
+
*
|
|
84
|
+
* Result.mapError(TextDiff.apply([1], edits), TextDiff.isTextDiffError) // => Result.fail(true)
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @see {@link apply} and {@link applyText} for the operations that return it
|
|
88
|
+
* @see {@link isTextDiffError} for narrowing unknown values
|
|
89
|
+
* @stability experimental
|
|
90
|
+
* @category errors
|
|
91
|
+
* @since 4.0.6
|
|
92
|
+
*/
|
|
93
|
+
export class TextDiffError extends Data.TaggedError("TextDiffError")<{
|
|
94
|
+
readonly message: string
|
|
95
|
+
}> {
|
|
96
|
+
readonly [TextDiffErrorTypeId]: typeof TextDiffErrorTypeId = TextDiffErrorTypeId
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Checks whether a value is a `TextDiffError`.
|
|
101
|
+
*
|
|
102
|
+
* @stability experimental
|
|
103
|
+
* @category guards
|
|
104
|
+
* @since 4.0.6
|
|
105
|
+
*/
|
|
106
|
+
export const isTextDiffError = (u: unknown): u is TextDiffError => hasProperty(u, TextDiffErrorTypeId)
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Creates a function that computes a minimal edit script between two arrays
|
|
110
|
+
* using a custom equivalence.
|
|
111
|
+
*
|
|
112
|
+
* **When to use**
|
|
113
|
+
*
|
|
114
|
+
* Use when items should match by key or by a structural comparison other than
|
|
115
|
+
* `Equal.equals`.
|
|
116
|
+
*
|
|
117
|
+
* **Details**
|
|
118
|
+
*
|
|
119
|
+
* Unless the `maxEdits` cap is exceeded, the script has the
|
|
120
|
+
* fewest possible inserted plus deleted items. `Equal` runs carry the items
|
|
121
|
+
* from `before`, not necessarily the exact values from `after`.
|
|
122
|
+
*
|
|
123
|
+
* **Gotchas**
|
|
124
|
+
*
|
|
125
|
+
* Without `maxEdits`, work grows with the product of the input size and the
|
|
126
|
+
* number of differences, which is quadratic for unrelated inputs. Set
|
|
127
|
+
* `maxEdits` for large or untrusted inputs.
|
|
128
|
+
*
|
|
129
|
+
* **Example** (Matching items by id)
|
|
130
|
+
*
|
|
131
|
+
* ```ts import.meta.vitest
|
|
132
|
+
* import { TextDiff } from "effect"
|
|
133
|
+
*
|
|
134
|
+
* const diffById = TextDiff.diffWith<{ readonly id: number }>((a, b) => a.id === b.id)
|
|
135
|
+
*
|
|
136
|
+
* diffById([{ id: 1 }, { id: 2 }], [{ id: 2 }]) // => [{ _tag: "Delete", items: [{ id: 1 }] }, { _tag: "Equal", items: [{ id: 2 }] }]
|
|
137
|
+
* ```
|
|
138
|
+
*
|
|
139
|
+
* @see {@link diff} for the `Equal.equals` variant
|
|
140
|
+
* @stability experimental
|
|
141
|
+
* @category constructors
|
|
142
|
+
* @since 4.0.6
|
|
143
|
+
*/
|
|
144
|
+
export const diffWith = <A>(isEquivalent: (self: A, that: A) => boolean) =>
|
|
145
|
+
(
|
|
146
|
+
before: ReadonlyArray<A>,
|
|
147
|
+
after: ReadonlyArray<A>,
|
|
148
|
+
options?: {
|
|
149
|
+
/**
|
|
150
|
+
* Largest number of inserted plus deleted items searched for in each
|
|
151
|
+
* changed region. Common prefixes, suffixes and matching runs are free.
|
|
152
|
+
* When a region needs more edits, the search splits it at the furthest
|
|
153
|
+
* point it reached and continues on the rest, and a part that still cannot
|
|
154
|
+
* be matched becomes a deletion followed by an insertion. The script stays
|
|
155
|
+
* valid, and is minimal whenever the whole diff needs at most `maxEdits`
|
|
156
|
+
* edits. For a finite cap, work is O((N + M) * (maxEdits + 1)).
|
|
157
|
+
*
|
|
158
|
+
* @default Infinity
|
|
159
|
+
*/
|
|
160
|
+
readonly maxEdits?: number | undefined
|
|
161
|
+
}
|
|
162
|
+
): Array<Edit<A>> => editScript(before, after, (i, j) => isEquivalent(before[i], after[j]), options?.maxEdits)
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Computes a minimal edit script between two arrays, comparing items with
|
|
166
|
+
* `Equal.equals`.
|
|
167
|
+
*
|
|
168
|
+
* **Details**
|
|
169
|
+
*
|
|
170
|
+
* Unless the `maxEdits` cap is exceeded, the script has the
|
|
171
|
+
* fewest possible inserted plus deleted items. The choice is deterministic,
|
|
172
|
+
* and each change lists its deletions before its insertions.
|
|
173
|
+
*
|
|
174
|
+
* **Gotchas**
|
|
175
|
+
*
|
|
176
|
+
* Without `maxEdits`, work is quadratic for unrelated inputs. Set `maxEdits`
|
|
177
|
+
* when diffing large or untrusted arrays.
|
|
178
|
+
*
|
|
179
|
+
* **Example** (Diffing two arrays)
|
|
180
|
+
*
|
|
181
|
+
* ```ts import.meta.vitest
|
|
182
|
+
* import { TextDiff } from "effect"
|
|
183
|
+
*
|
|
184
|
+
* TextDiff.diff([1, 2, 3, 4], [1, 3, 4, 5]) // => [{ _tag: "Equal", items: [1] }, { _tag: "Delete", items: [2] }, { _tag: "Equal", items: [3, 4] }, { _tag: "Insert", items: [5] }]
|
|
185
|
+
* ```
|
|
186
|
+
*
|
|
187
|
+
* @see {@link diffWith} to compare items with a custom equivalence
|
|
188
|
+
* @see {@link apply} to replay a script
|
|
189
|
+
* @stability experimental
|
|
190
|
+
* @category constructors
|
|
191
|
+
* @since 4.0.6
|
|
192
|
+
*/
|
|
193
|
+
export const diff = <A>(
|
|
194
|
+
before: ReadonlyArray<A>,
|
|
195
|
+
after: ReadonlyArray<A>,
|
|
196
|
+
options?: {
|
|
197
|
+
/**
|
|
198
|
+
* Largest number of inserted plus deleted items searched for in each
|
|
199
|
+
* changed region. Common prefixes, suffixes and matching runs are free.
|
|
200
|
+
* When a region needs more edits, the search splits it at the furthest
|
|
201
|
+
* point it reached and continues on the rest, and a part that still cannot
|
|
202
|
+
* be matched becomes a deletion followed by an insertion. The script stays
|
|
203
|
+
* valid, and is minimal whenever the whole diff needs at most `maxEdits`
|
|
204
|
+
* edits. For a finite cap, work is O((N + M) * (maxEdits + 1)).
|
|
205
|
+
*
|
|
206
|
+
* @default Infinity
|
|
207
|
+
*/
|
|
208
|
+
readonly maxEdits?: number | undefined
|
|
209
|
+
}
|
|
210
|
+
): Array<Edit<A>> => diffWith<A>(Equal.equals)(before, after, options)
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Computes a minimal line-level edit script between two strings.
|
|
214
|
+
*
|
|
215
|
+
* **Details**
|
|
216
|
+
*
|
|
217
|
+
* Each line keeps its `\n` terminator, so `\n` versus `\r\n` endings and a
|
|
218
|
+
* missing final newline are reported as changes. Joining the items of a run
|
|
219
|
+
* gives the exact text it covers.
|
|
220
|
+
*
|
|
221
|
+
* **Gotchas**
|
|
222
|
+
*
|
|
223
|
+
* Without `maxEdits`, work is quadratic for unrelated inputs. Set `maxEdits`
|
|
224
|
+
* when diffing large or untrusted text.
|
|
225
|
+
*
|
|
226
|
+
* **Example** (Diffing lines)
|
|
227
|
+
*
|
|
228
|
+
* ```ts import.meta.vitest
|
|
229
|
+
* import { TextDiff } from "effect"
|
|
230
|
+
*
|
|
231
|
+
* TextDiff.lines("a\nb\n", "a\nc\n") // => [{ _tag: "Equal", items: ["a\n"] }, { _tag: "Delete", items: ["b\n"] }, { _tag: "Insert", items: ["c\n"] }]
|
|
232
|
+
* ```
|
|
233
|
+
*
|
|
234
|
+
* @see {@link codePoints} for a code point diff
|
|
235
|
+
* @see {@link unified} to format a line diff
|
|
236
|
+
* @stability experimental
|
|
237
|
+
* @category constructors
|
|
238
|
+
* @since 4.0.6
|
|
239
|
+
*/
|
|
240
|
+
export const lines = (before: string, after: string, options?: {
|
|
241
|
+
/**
|
|
242
|
+
* Largest number of inserted plus deleted items searched for in each
|
|
243
|
+
* changed region. Common prefixes, suffixes and matching runs are free.
|
|
244
|
+
* When a region needs more edits, the search splits it at the furthest
|
|
245
|
+
* point it reached and continues on the rest, and a part that still cannot
|
|
246
|
+
* be matched becomes a deletion followed by an insertion. The script stays
|
|
247
|
+
* valid, and is minimal whenever the whole diff needs at most `maxEdits`
|
|
248
|
+
* edits. For a finite cap, work is O((N + M) * (maxEdits + 1)).
|
|
249
|
+
*
|
|
250
|
+
* @default Infinity
|
|
251
|
+
*/
|
|
252
|
+
readonly maxEdits?: number | undefined
|
|
253
|
+
}): Array<Edit<string>> => diffStrings(splitLines(before), splitLines(after), options?.maxEdits)
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Computes a minimal code point edit script between two strings.
|
|
257
|
+
*
|
|
258
|
+
* **Details**
|
|
259
|
+
*
|
|
260
|
+
* Items are Unicode code points, so a surrogate pair is never split between
|
|
261
|
+
* runs. Grapheme clusters, such as an emoji with modifiers or a letter with
|
|
262
|
+
* combining marks, can still be split. The UTF-16 length of a run is the sum
|
|
263
|
+
* of its items' lengths.
|
|
264
|
+
*
|
|
265
|
+
* **Gotchas**
|
|
266
|
+
*
|
|
267
|
+
* Without `maxEdits`, work is quadratic for unrelated inputs. Set `maxEdits`
|
|
268
|
+
* when diffing large or untrusted text.
|
|
269
|
+
*
|
|
270
|
+
* **Example** (Diffing code points)
|
|
271
|
+
*
|
|
272
|
+
* ```ts import.meta.vitest
|
|
273
|
+
* import { TextDiff } from "effect"
|
|
274
|
+
*
|
|
275
|
+
* TextDiff.codePoints("cat", "cut") // => [{ _tag: "Equal", items: ["c"] }, { _tag: "Delete", items: ["a"] }, { _tag: "Insert", items: ["u"] }, { _tag: "Equal", items: ["t"] }]
|
|
276
|
+
* ```
|
|
277
|
+
*
|
|
278
|
+
* @see {@link lines} for a line diff
|
|
279
|
+
* @see {@link applyText} to replay a script on a string
|
|
280
|
+
* @stability experimental
|
|
281
|
+
* @category constructors
|
|
282
|
+
* @since 4.0.6
|
|
283
|
+
*/
|
|
284
|
+
export const codePoints = (before: string, after: string, options?: {
|
|
285
|
+
/**
|
|
286
|
+
* Largest number of inserted plus deleted items searched for in each
|
|
287
|
+
* changed region. Common prefixes, suffixes and matching runs are free.
|
|
288
|
+
* When a region needs more edits, the search splits it at the furthest
|
|
289
|
+
* point it reached and continues on the rest, and a part that still cannot
|
|
290
|
+
* be matched becomes a deletion followed by an insertion. The script stays
|
|
291
|
+
* valid, and is minimal whenever the whole diff needs at most `maxEdits`
|
|
292
|
+
* edits. For a finite cap, work is O((N + M) * (maxEdits + 1)).
|
|
293
|
+
*
|
|
294
|
+
* @default Infinity
|
|
295
|
+
*/
|
|
296
|
+
readonly maxEdits?: number | undefined
|
|
297
|
+
}): Array<Edit<string>> => diffStrings(Array.from(before), Array.from(after), options?.maxEdits)
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Applies an edit script to an array.
|
|
301
|
+
*
|
|
302
|
+
* **Details**
|
|
303
|
+
*
|
|
304
|
+
* `Equal` and `Delete` runs consume items from `before` by count, `Equal` runs
|
|
305
|
+
* copy them to the result, and `Insert` runs add their items. Run contents are
|
|
306
|
+
* not compared with `before`, since under a custom equivalence `Equal` items
|
|
307
|
+
* can differ from the input.
|
|
308
|
+
*
|
|
309
|
+
* **Gotchas**
|
|
310
|
+
*
|
|
311
|
+
* Fails with a {@link TextDiffError} when the runs do not consume exactly
|
|
312
|
+
* `before.length` items.
|
|
313
|
+
*
|
|
314
|
+
* **Example** (Replaying a script)
|
|
315
|
+
*
|
|
316
|
+
* ```ts import.meta.vitest
|
|
317
|
+
* import { Result, TextDiff } from "effect"
|
|
318
|
+
*
|
|
319
|
+
* const edits = TextDiff.diff([1, 2, 3], [1, 3, 4])
|
|
320
|
+
*
|
|
321
|
+
* TextDiff.apply([1, 2, 3], edits) // => Result.succeed([1, 3, 4])
|
|
322
|
+
* ```
|
|
323
|
+
*
|
|
324
|
+
* @see {@link applyText} for the string variant
|
|
325
|
+
* @see {@link invert} to apply a script in reverse
|
|
326
|
+
* @stability experimental
|
|
327
|
+
* @category combinators
|
|
328
|
+
* @since 4.0.6
|
|
329
|
+
*/
|
|
330
|
+
export const apply = <A>(
|
|
331
|
+
before: ReadonlyArray<A>,
|
|
332
|
+
edits: ReadonlyArray<Edit<A>>
|
|
333
|
+
): Result.Result<Array<A>, TextDiffError> => {
|
|
334
|
+
const out: Array<A> = []
|
|
335
|
+
let index = 0
|
|
336
|
+
for (const edit of edits) {
|
|
337
|
+
if (edit._tag === "Insert") {
|
|
338
|
+
for (const item of edit.items) out.push(item)
|
|
339
|
+
continue
|
|
340
|
+
}
|
|
341
|
+
const end = index + edit.items.length
|
|
342
|
+
if (end > before.length) return fail("Edit script consumes more items than the input contains")
|
|
343
|
+
if (edit._tag === "Equal") {
|
|
344
|
+
for (let i = index; i < end; i++) out.push(before[i])
|
|
345
|
+
}
|
|
346
|
+
index = end
|
|
347
|
+
}
|
|
348
|
+
if (index !== before.length) return fail("Edit script consumes fewer items than the input contains")
|
|
349
|
+
return Result.succeed(out)
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Applies a text edit script to a string.
|
|
354
|
+
*
|
|
355
|
+
* **Details**
|
|
356
|
+
*
|
|
357
|
+
* Works with scripts from both {@link lines} and {@link codePoints}. The
|
|
358
|
+
* joined items of each `Equal` and `Delete` run must match `before` at the
|
|
359
|
+
* current position, so a script made for different text is rejected rather
|
|
360
|
+
* than applied.
|
|
361
|
+
*
|
|
362
|
+
* **Gotchas**
|
|
363
|
+
*
|
|
364
|
+
* Fails with a {@link TextDiffError} when a run does not match `before`, or
|
|
365
|
+
* when the runs do not cover all of it.
|
|
366
|
+
*
|
|
367
|
+
* **Example** (Replaying a code point diff)
|
|
368
|
+
*
|
|
369
|
+
* ```ts import.meta.vitest
|
|
370
|
+
* import { Result, TextDiff } from "effect"
|
|
371
|
+
*
|
|
372
|
+
* const edits = TextDiff.codePoints("cat", "cut")
|
|
373
|
+
*
|
|
374
|
+
* TextDiff.applyText("cat", edits) // => Result.succeed("cut")
|
|
375
|
+
* ```
|
|
376
|
+
*
|
|
377
|
+
* @see {@link apply} for the array variant
|
|
378
|
+
* @stability experimental
|
|
379
|
+
* @category combinators
|
|
380
|
+
* @since 4.0.6
|
|
381
|
+
*/
|
|
382
|
+
export const applyText = (
|
|
383
|
+
before: string,
|
|
384
|
+
edits: ReadonlyArray<Edit<string>>
|
|
385
|
+
): Result.Result<string, TextDiffError> => {
|
|
386
|
+
let out = ""
|
|
387
|
+
let index = 0
|
|
388
|
+
for (const edit of edits) {
|
|
389
|
+
const text = edit.items.join("")
|
|
390
|
+
if (edit._tag === "Insert") {
|
|
391
|
+
out += text
|
|
392
|
+
continue
|
|
393
|
+
}
|
|
394
|
+
if (!before.startsWith(text, index)) return fail(`Edit script does not match the input at index ${index}`)
|
|
395
|
+
if (edit._tag === "Equal") out += text
|
|
396
|
+
index += text.length
|
|
397
|
+
}
|
|
398
|
+
if (index !== before.length) return fail("Edit script covers less text than the input contains")
|
|
399
|
+
return Result.succeed(out)
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Inverts an edit script, so it turns `after` back into `before`.
|
|
404
|
+
*
|
|
405
|
+
* **Details**
|
|
406
|
+
*
|
|
407
|
+
* Swaps the items of each change's `Delete` and `Insert` runs, keeping
|
|
408
|
+
* deletions before insertions. `Equal` runs are unchanged.
|
|
409
|
+
*
|
|
410
|
+
* **Example** (Undoing a change)
|
|
411
|
+
*
|
|
412
|
+
* ```ts import.meta.vitest
|
|
413
|
+
* import { Result, TextDiff } from "effect"
|
|
414
|
+
*
|
|
415
|
+
* const edits = TextDiff.diff([1, 2], [1, 3])
|
|
416
|
+
*
|
|
417
|
+
* TextDiff.apply([1, 3], TextDiff.invert(edits)) // => Result.succeed([1, 2])
|
|
418
|
+
* ```
|
|
419
|
+
*
|
|
420
|
+
* @stability experimental
|
|
421
|
+
* @category combinators
|
|
422
|
+
* @since 4.0.6
|
|
423
|
+
*/
|
|
424
|
+
export const invert = <A>(edits: ReadonlyArray<Edit<A>>): Array<Edit<A>> => {
|
|
425
|
+
const out: Array<Edit<A>> = []
|
|
426
|
+
let deleted: ReadonlyArray<A> = []
|
|
427
|
+
let inserted: ReadonlyArray<A> = []
|
|
428
|
+
const flush = () => {
|
|
429
|
+
if (inserted.length > 0) out.push({ _tag: "Delete", items: inserted })
|
|
430
|
+
if (deleted.length > 0) out.push({ _tag: "Insert", items: deleted })
|
|
431
|
+
deleted = []
|
|
432
|
+
inserted = []
|
|
433
|
+
}
|
|
434
|
+
for (const edit of edits) {
|
|
435
|
+
if (edit._tag === "Delete") {
|
|
436
|
+
deleted = deleted.concat(edit.items)
|
|
437
|
+
} else if (edit._tag === "Insert") {
|
|
438
|
+
inserted = inserted.concat(edit.items)
|
|
439
|
+
} else {
|
|
440
|
+
flush()
|
|
441
|
+
out.push(edit)
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
flush()
|
|
445
|
+
return out
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Formats a line edit script as a unified diff.
|
|
450
|
+
*
|
|
451
|
+
* **Details**
|
|
452
|
+
*
|
|
453
|
+
* The script must come from {@link lines}, or otherwise hold one line per
|
|
454
|
+
* item. The output follows `diff -u`: hunks whose context would touch or
|
|
455
|
+
* overlap are merged, and a final line without a newline is followed by
|
|
456
|
+
* ``. When `fromFile` or `toFile` is set, both
|
|
457
|
+
* header lines are emitted and an unset name falls back to the other. A script
|
|
458
|
+
* without changes produces an empty string.
|
|
459
|
+
*
|
|
460
|
+
* **Gotchas**
|
|
461
|
+
*
|
|
462
|
+
* Among equally small diffs, hunks can differ from those of GNU diff or Git,
|
|
463
|
+
* which apply extra heuristics.
|
|
464
|
+
*
|
|
465
|
+
* **Example** (Formatting a unified diff)
|
|
466
|
+
*
|
|
467
|
+
* ```ts import.meta.vitest
|
|
468
|
+
* import { TextDiff } from "effect"
|
|
469
|
+
*
|
|
470
|
+
* TextDiff.unified(TextDiff.lines("a\nb\n", "a\nc\n")) // => "@@ -1,2 +1,2 @@\n a\n-b\n+c\n"
|
|
471
|
+
* ```
|
|
472
|
+
*
|
|
473
|
+
* @see {@link lines} to compute a line diff
|
|
474
|
+
* @stability experimental
|
|
475
|
+
* @category formatting
|
|
476
|
+
* @since 4.0.6
|
|
477
|
+
*/
|
|
478
|
+
export const unified = (edits: ReadonlyArray<Edit<string>>, options?: {
|
|
479
|
+
/**
|
|
480
|
+
* Number of unchanged lines shown around each change.
|
|
481
|
+
*
|
|
482
|
+
* @default 3
|
|
483
|
+
*/
|
|
484
|
+
readonly context?: number | undefined
|
|
485
|
+
/**
|
|
486
|
+
* Name shown in the `---` header line.
|
|
487
|
+
*/
|
|
488
|
+
readonly fromFile?: string | undefined
|
|
489
|
+
/**
|
|
490
|
+
* Name shown in the `+++` header line.
|
|
491
|
+
*/
|
|
492
|
+
readonly toFile?: string | undefined
|
|
493
|
+
}): string => {
|
|
494
|
+
const a: Array<string> = []
|
|
495
|
+
const b: Array<string> = []
|
|
496
|
+
// Group consecutive deletions and insertions between Equal runs.
|
|
497
|
+
const changes: Array<Change> = []
|
|
498
|
+
let change: Change | undefined
|
|
499
|
+
for (const edit of edits) {
|
|
500
|
+
if (edit._tag === "Equal") {
|
|
501
|
+
change = undefined
|
|
502
|
+
for (const line of edit.items) {
|
|
503
|
+
a.push(line)
|
|
504
|
+
b.push(line)
|
|
505
|
+
}
|
|
506
|
+
continue
|
|
507
|
+
}
|
|
508
|
+
if (edit.items.length === 0) continue
|
|
509
|
+
if (change === undefined) {
|
|
510
|
+
change = { a0: a.length, a1: a.length, b0: b.length, b1: b.length }
|
|
511
|
+
changes.push(change)
|
|
512
|
+
}
|
|
513
|
+
if (edit._tag === "Delete") {
|
|
514
|
+
for (const line of edit.items) a.push(line)
|
|
515
|
+
change.a1 = a.length
|
|
516
|
+
} else {
|
|
517
|
+
for (const line of edit.items) b.push(line)
|
|
518
|
+
change.b1 = b.length
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
if (changes.length === 0) return ""
|
|
522
|
+
|
|
523
|
+
const context = Math.max(0, Math.floor(options?.context ?? 3))
|
|
524
|
+
let out = ""
|
|
525
|
+
if (options?.fromFile !== undefined || options?.toFile !== undefined) {
|
|
526
|
+
out += `--- ${options.fromFile ?? options.toFile}\n+++ ${options.toFile ?? options.fromFile}\n`
|
|
527
|
+
}
|
|
528
|
+
let start = 0
|
|
529
|
+
while (start < changes.length) {
|
|
530
|
+
let end = start + 1
|
|
531
|
+
while (end < changes.length && changes[end].a0 - changes[end - 1].a1 <= 2 * context) end++
|
|
532
|
+
const first = changes[start]
|
|
533
|
+
const last = changes[end - 1]
|
|
534
|
+
const a0 = Math.max(0, first.a0 - context)
|
|
535
|
+
const b0 = first.b0 - (first.a0 - a0)
|
|
536
|
+
const a1 = Math.min(a.length, last.a1 + context)
|
|
537
|
+
const b1 = last.b1 + (a1 - last.a1)
|
|
538
|
+
out += `@@ -${range(a0, a1 - a0)} +${range(b0, b1 - b0)} @@\n`
|
|
539
|
+
let line = a0
|
|
540
|
+
for (let c = start; c < end; c++) {
|
|
541
|
+
const change = changes[c]
|
|
542
|
+
for (; line < change.a0; line++) out += formatLine(" ", a[line])
|
|
543
|
+
for (let k = change.a0; k < change.a1; k++) out += formatLine("-", a[k])
|
|
544
|
+
for (let k = change.b0; k < change.b1; k++) out += formatLine("+", b[k])
|
|
545
|
+
line = change.a1
|
|
546
|
+
}
|
|
547
|
+
for (; line < a1; line++) out += formatLine(" ", a[line])
|
|
548
|
+
start = end
|
|
549
|
+
}
|
|
550
|
+
return out
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
// -----------------------------------------------------------------------------
|
|
554
|
+
// internal
|
|
555
|
+
// -----------------------------------------------------------------------------
|
|
556
|
+
|
|
557
|
+
const fail = (message: string) => Result.fail(new TextDiffError({ message }))
|
|
558
|
+
|
|
559
|
+
interface Block {
|
|
560
|
+
readonly a: number
|
|
561
|
+
readonly b: number
|
|
562
|
+
readonly length: number
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
interface Change {
|
|
566
|
+
a0: number
|
|
567
|
+
a1: number
|
|
568
|
+
b0: number
|
|
569
|
+
b1: number
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
interface Region {
|
|
573
|
+
readonly aLo: number
|
|
574
|
+
readonly aHi: number
|
|
575
|
+
readonly bLo: number
|
|
576
|
+
readonly bHi: number
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
// A diagonal run from (x, y) to (u, v)
|
|
580
|
+
interface Snake {
|
|
581
|
+
readonly x: number
|
|
582
|
+
readonly y: number
|
|
583
|
+
readonly u: number
|
|
584
|
+
readonly v: number
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
const splitLines = (text: string): Array<string> => text.match(/[^\n]*\n|[^\n]+$/g) ?? []
|
|
588
|
+
|
|
589
|
+
const range = (start: number, count: number): string =>
|
|
590
|
+
count === 0 ? `${start},0` : count === 1 ? `${start + 1}` : `${start + 1},${count}`
|
|
591
|
+
|
|
592
|
+
const formatLine = (prefix: string, line: string): string =>
|
|
593
|
+
line.endsWith("\n") ? prefix + line : `${prefix}${line}\n\\n`
|
|
594
|
+
|
|
595
|
+
// Interns the tokens so the search compares integers instead of strings
|
|
596
|
+
const diffStrings = (a: ReadonlyArray<string>, b: ReadonlyArray<string>, maxEdits?: number) => {
|
|
597
|
+
const ids = new Map<string, number>()
|
|
598
|
+
const intern = (token: string) => {
|
|
599
|
+
let id = ids.get(token)
|
|
600
|
+
if (id === undefined) {
|
|
601
|
+
id = ids.size
|
|
602
|
+
ids.set(token, id)
|
|
603
|
+
}
|
|
604
|
+
return id
|
|
605
|
+
}
|
|
606
|
+
const ai = Int32Array.from(a, intern)
|
|
607
|
+
const bi = Int32Array.from(b, intern)
|
|
608
|
+
return editScript(a, b, (i, j) => ai[i] === bi[j], maxEdits)
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
const editScript = <A>(
|
|
612
|
+
a: ReadonlyArray<A>,
|
|
613
|
+
b: ReadonlyArray<A>,
|
|
614
|
+
equals: (i: number, j: number) => boolean,
|
|
615
|
+
maxEdits?: number
|
|
616
|
+
): Array<Edit<A>> => {
|
|
617
|
+
const blocks = matchingBlocks(a.length, b.length, equals, maxEdits)
|
|
618
|
+
// A final empty block flushes the trailing changes
|
|
619
|
+
blocks.push({ a: a.length, b: b.length, length: 0 })
|
|
620
|
+
const out: Array<Edit<A>> = []
|
|
621
|
+
let i = 0
|
|
622
|
+
let j = 0
|
|
623
|
+
for (const block of blocks) {
|
|
624
|
+
if (block.a > i) out.push({ _tag: "Delete", items: a.slice(i, block.a) })
|
|
625
|
+
if (block.b > j) out.push({ _tag: "Insert", items: b.slice(j, block.b) })
|
|
626
|
+
if (block.length > 0) out.push({ _tag: "Equal", items: a.slice(block.a, block.a + block.length) })
|
|
627
|
+
i = block.a + block.length
|
|
628
|
+
j = block.b + block.length
|
|
629
|
+
}
|
|
630
|
+
return out
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
/**
|
|
634
|
+
* Returns ordered, merged matching runs for sequences of lengths n and m,
|
|
635
|
+
* using the index comparator. Linear-space Myers search splits each region
|
|
636
|
+
* at the middle snake of a minimal path, or at the furthest point reached
|
|
637
|
+
* when the search cap is exceeded.
|
|
638
|
+
*/
|
|
639
|
+
const matchingBlocks = (
|
|
640
|
+
n: number,
|
|
641
|
+
m: number,
|
|
642
|
+
equals: (i: number, j: number) => boolean,
|
|
643
|
+
maxEdits = Infinity
|
|
644
|
+
): Array<Block> => {
|
|
645
|
+
const blocks: Array<Block> = []
|
|
646
|
+
const push = (a: number, b: number, length: number) => {
|
|
647
|
+
if (length === 0) return
|
|
648
|
+
const last = blocks[blocks.length - 1]
|
|
649
|
+
if (last !== undefined && last.a + last.length === a && last.b + last.length === b) {
|
|
650
|
+
blocks[blocks.length - 1] = { a: last.a, b: last.b, length: last.length + length }
|
|
651
|
+
} else {
|
|
652
|
+
blocks.push({ a, b, length })
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
// Forward and reverse furthest-reaching x per diagonal, offset by n + m + 1
|
|
657
|
+
const offset = n + m + 1
|
|
658
|
+
const vf = new Int32Array(2 * offset + 1)
|
|
659
|
+
const vb = new Int32Array(2 * offset + 1)
|
|
660
|
+
// The searches meet after half the edits of a region, so a region needing at
|
|
661
|
+
// most `maxEdits` edits is solved within `maxD` steps of each search
|
|
662
|
+
const maxD = Math.ceil(Math.max(0, maxEdits) / 2)
|
|
663
|
+
|
|
664
|
+
// Returns the middle snake of a minimal path in absolute coordinates, or an
|
|
665
|
+
// empty snake at the furthest point reached when the region needs more than
|
|
666
|
+
// `maxEdits` edits, or undefined when no point inside the region was reached
|
|
667
|
+
const findSplit = (aLo: number, aHi: number, bLo: number, bHi: number): Snake | undefined => {
|
|
668
|
+
const N = aHi - aLo
|
|
669
|
+
const M = bHi - bLo
|
|
670
|
+
const delta = N - M
|
|
671
|
+
const odd = (delta & 1) === 1
|
|
672
|
+
const limit = Math.min((N + M + 1) >> 1, maxD)
|
|
673
|
+
vf[offset + 1] = 0
|
|
674
|
+
vb[offset + 1] = 0
|
|
675
|
+
for (let d = 0; d <= limit; d++) {
|
|
676
|
+
for (let k = -d; k <= d; k += 2) {
|
|
677
|
+
let x = k === -d || (k !== d && vf[offset + k - 1] < vf[offset + k + 1])
|
|
678
|
+
? vf[offset + k + 1]
|
|
679
|
+
: vf[offset + k - 1] + 1
|
|
680
|
+
let y = x - k
|
|
681
|
+
const x0 = x
|
|
682
|
+
const y0 = y
|
|
683
|
+
while (x < N && y < M && equals(aLo + x, bLo + y)) {
|
|
684
|
+
x++
|
|
685
|
+
y++
|
|
686
|
+
}
|
|
687
|
+
vf[offset + k] = x
|
|
688
|
+
if (odd && k >= delta - (d - 1) && k <= delta + (d - 1) && x + vb[offset + delta - k] >= N) {
|
|
689
|
+
return { x: aLo + x0, y: bLo + y0, u: aLo + x, v: bLo + y }
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
for (let k = -d; k <= d; k += 2) {
|
|
693
|
+
let x = k === -d || (k !== d && vb[offset + k - 1] < vb[offset + k + 1])
|
|
694
|
+
? vb[offset + k + 1]
|
|
695
|
+
: vb[offset + k - 1] + 1
|
|
696
|
+
let y = x - k
|
|
697
|
+
const x0 = x
|
|
698
|
+
const y0 = y
|
|
699
|
+
while (x < N && y < M && equals(aHi - x - 1, bHi - y - 1)) {
|
|
700
|
+
x++
|
|
701
|
+
y++
|
|
702
|
+
}
|
|
703
|
+
vb[offset + k] = x
|
|
704
|
+
if (!odd && k >= delta - d && k <= delta + d && x + vf[offset + delta - k] >= N) {
|
|
705
|
+
return { x: aHi - x, y: bHi - y, u: aHi - x0, v: bHi - y0 }
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// Over the cap: split at the reached point that covers the most items. It
|
|
711
|
+
// must lie strictly inside the region so that both parts shrink
|
|
712
|
+
let best = 0
|
|
713
|
+
let x = 0
|
|
714
|
+
let y = 0
|
|
715
|
+
for (let k = -limit; k <= limit; k += 2) {
|
|
716
|
+
const xf = vf[offset + k]
|
|
717
|
+
const yf = xf - k
|
|
718
|
+
if (xf <= N && yf >= 0 && yf <= M && xf + yf > best) {
|
|
719
|
+
best = xf + yf
|
|
720
|
+
x = aLo + xf
|
|
721
|
+
y = bLo + yf
|
|
722
|
+
}
|
|
723
|
+
const xb = vb[offset + k]
|
|
724
|
+
const yb = xb - k
|
|
725
|
+
if (xb <= N && yb >= 0 && yb <= M && xb + yb > best) {
|
|
726
|
+
best = xb + yb
|
|
727
|
+
x = aHi - xb
|
|
728
|
+
y = bHi - yb
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
return best > 0 && best < N + M ? { x, y, u: x, v: y } : undefined
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
// Regions are processed in order from an explicit stack, since splits over
|
|
735
|
+
// the cap can nest deeper than the call stack allows
|
|
736
|
+
const stack: Array<Region | Block> = [{ aLo: 0, aHi: n, bLo: 0, bHi: m }]
|
|
737
|
+
while (stack.length > 0) {
|
|
738
|
+
const task = stack.pop()!
|
|
739
|
+
if ("length" in task) {
|
|
740
|
+
push(task.a, task.b, task.length)
|
|
741
|
+
continue
|
|
742
|
+
}
|
|
743
|
+
let { aHi, aLo, bHi, bLo } = task
|
|
744
|
+
let prefix = 0
|
|
745
|
+
while (aLo + prefix < aHi && bLo + prefix < bHi && equals(aLo + prefix, bLo + prefix)) prefix++
|
|
746
|
+
push(aLo, bLo, prefix)
|
|
747
|
+
aLo += prefix
|
|
748
|
+
bLo += prefix
|
|
749
|
+
let suffix = 0
|
|
750
|
+
while (aLo < aHi - suffix && bLo < bHi - suffix && equals(aHi - suffix - 1, bHi - suffix - 1)) suffix++
|
|
751
|
+
aHi -= suffix
|
|
752
|
+
bHi -= suffix
|
|
753
|
+
stack.push({ a: aHi, b: bHi, length: suffix })
|
|
754
|
+
// With a common prefix and suffix removed, a non-empty side on both ends
|
|
755
|
+
// means at least two edits, so both halves below are strictly smaller
|
|
756
|
+
const snake = aLo < aHi && bLo < bHi ? findSplit(aLo, aHi, bLo, bHi) : undefined
|
|
757
|
+
if (snake !== undefined) {
|
|
758
|
+
stack.push(
|
|
759
|
+
{ aLo: snake.u, aHi, bLo: snake.v, bHi },
|
|
760
|
+
{ a: snake.x, b: snake.y, length: snake.u - snake.x },
|
|
761
|
+
{ aLo, aHi: snake.x, bLo, bHi: snake.y }
|
|
762
|
+
)
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
return blocks
|
|
766
|
+
}
|