diff --git a/src/Nitro/CommandLine/src/CommandLine/Commands/Clients/PublishClientCommand.cs b/src/Nitro/CommandLine/src/CommandLine/Commands/Clients/PublishClientCommand.cs index 9e0cca073aa..bd076c9bb90 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Commands/Clients/PublishClientCommand.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Commands/Clients/PublishClientCommand.cs @@ -193,8 +193,8 @@ private static async Task ExecuteAsync( child.Update( Messages.ValidationFailed, - approvalErrorTree, - ActivityUpdateKind.Warning); + ActivityUpdateKind.Warning, + approvalErrorTree); } child.Update( diff --git a/src/Nitro/CommandLine/src/CommandLine/Commands/Fusion/FusionPublishHelpers.cs b/src/Nitro/CommandLine/src/CommandLine/Commands/Fusion/FusionPublishHelpers.cs index 6dc20da123f..119b8d93d22 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Commands/Fusion/FusionPublishHelpers.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Commands/Fusion/FusionPublishHelpers.cs @@ -276,7 +276,7 @@ public static async Task UploadFusionConfigurationAsync( } } - activity.Update(Messages.ValidationFailed, errorTree, ActivityUpdateKind.Warning); + activity.Update(Messages.ValidationFailed, ActivityUpdateKind.Warning, errorTree); } activity.Update(Messages.WaitingForApproval, ActivityUpdateKind.Waiting); diff --git a/src/Nitro/CommandLine/src/CommandLine/Commands/Mcp/PublishMcpFeatureCollectionCommand.cs b/src/Nitro/CommandLine/src/CommandLine/Commands/Mcp/PublishMcpFeatureCollectionCommand.cs index 0c0d88ba937..56c5063dd47 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Commands/Mcp/PublishMcpFeatureCollectionCommand.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Commands/Mcp/PublishMcpFeatureCollectionCommand.cs @@ -189,7 +189,7 @@ private static async Task ExecuteAsync( } } - child.Update(Messages.ValidationFailed, approvalErrorTree, ActivityUpdateKind.Warning); + child.Update(Messages.ValidationFailed, ActivityUpdateKind.Warning, approvalErrorTree); } child.Update(Messages.WaitingForApproval, ActivityUpdateKind.Waiting); diff --git a/src/Nitro/CommandLine/src/CommandLine/Commands/OpenApi/PublishOpenApiCollectionCommand.cs b/src/Nitro/CommandLine/src/CommandLine/Commands/OpenApi/PublishOpenApiCollectionCommand.cs index f81a2a5b772..b2b88174cd1 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Commands/OpenApi/PublishOpenApiCollectionCommand.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Commands/OpenApi/PublishOpenApiCollectionCommand.cs @@ -189,7 +189,7 @@ private static async Task ExecuteAsync( } } - child.Update(Messages.ValidationFailed, approvalErrorTree, ActivityUpdateKind.Warning); + child.Update(Messages.ValidationFailed, ActivityUpdateKind.Warning, approvalErrorTree); } child.Update(Messages.WaitingForApproval, ActivityUpdateKind.Waiting); diff --git a/src/Nitro/CommandLine/src/CommandLine/Commands/Schemas/PublishSchemaCommand.cs b/src/Nitro/CommandLine/src/CommandLine/Commands/Schemas/PublishSchemaCommand.cs index d80eeecb017..6c982316fb0 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Commands/Schemas/PublishSchemaCommand.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Commands/Schemas/PublishSchemaCommand.cs @@ -231,8 +231,8 @@ private static async Task ExecuteAsync( child.Update( Messages.ValidationFailed, - deploymentErrorTree, - ActivityUpdateKind.Warning); + ActivityUpdateKind.Warning, + deploymentErrorTree); } child.Update( diff --git a/src/Nitro/CommandLine/src/CommandLine/Extensions/ConsoleRenderingExtensions.cs b/src/Nitro/CommandLine/src/CommandLine/Extensions/ConsoleRenderingExtensions.cs index 78d1b695fea..aade948e893 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Extensions/ConsoleRenderingExtensions.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Extensions/ConsoleRenderingExtensions.cs @@ -17,6 +17,16 @@ public static string AsSyntax(this string str) return $"[bold]{str.EscapeMarkup()}[/]"; } + public static string AsError(this string str) + { + return $"[red]{str.EscapeMarkup()}[/]"; + } + + public static string AsWarning(this string str) + { + return $"[yellow]{str.EscapeMarkup()}[/]"; + } + public static string AsDescription(this string str) { return $"[italic dim]{str.EscapeMarkup()}[/]"; diff --git a/src/Nitro/CommandLine/src/CommandLine/Extensions/TreeNodeExtensions.cs b/src/Nitro/CommandLine/src/CommandLine/Extensions/TreeNodeExtensions.cs index 353d46c66ca..18f6bb2697a 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Extensions/TreeNodeExtensions.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Extensions/TreeNodeExtensions.cs @@ -9,7 +9,7 @@ public static IHasTreeNodes AddErrorMessage( this IHasTreeNodes node, string message) { - return node.AddNode($"[red]{message.EscapeMarkup()}[/]"); + return node.AddNode(message.EscapeMarkup().AsError()); } public static IHasTreeNodes AddSchemaVersionChangeViolations( @@ -32,11 +32,11 @@ public static IHasTreeNodes AddGraphQLSchemaErrors( this IHasTreeNodes node, IInvalidGraphQLSchemaError error) { - var schemaErrorsNode = node.AddNode("Invalid GraphQL schema"); + var schemaErrorsNode = node.AddErrorMessage("Invalid GraphQL schema"); - foreach (var query in error.Errors) + foreach (var schemaError in error.Errors) { - schemaErrorsNode.AddNode($"[red]{query.Message.EscapeMarkup()}[/] [grey]{query.Code}[/]"); + schemaErrorsNode.AddNode($"{schemaError.Message.AsError()} [dim]{schemaError.Code}[/]"); } return node; @@ -47,27 +47,9 @@ public static IHasTreeNodes AddPersistedQueryValidationErrorsWithClients( IPersistedQueryValidationError error) { var client = error.Client; - var clientNode = node.AddNode($"Client '{client?.Name.EscapeMarkup()}' (ID: {client?.Id})"); + var clientNode = node.AddNode($"Client '{client?.Name.EscapeMarkup()}' [dim](ID: {client?.Id})[/]"); - foreach (var operation in error.Queries) - { - var publishingInfo = operation.DeployedTags.Count > 0 - ? $" (Deployed tags: {string.Join(",", operation.DeployedTags)})" - : ""; - - var operationNode = clientNode.AddNode($"Operation '{operation.Hash}'{publishingInfo}"); - - foreach (var err in operation.Errors) - { - var errorLocation = string.Empty; - if (err.Locations is { Count: > 0 } locations) - { - errorLocation = $"({locations[0].Line}:{locations[0].Column})"; - } - - operationNode.AddNode($"{err.Message.EscapeMarkup()} {errorLocation}"); - } - } + AddPersistedQueryValidationErrors(clientNode, error); return node; } @@ -79,7 +61,7 @@ public static IHasTreeNodes AddPersistedQueryValidationErrors( foreach (var operation in error.Queries) { var publishingInfo = operation.DeployedTags.Count > 0 - ? $" (Deployed tags: {string.Join(",", operation.DeployedTags)})" + ? $" [dim](Deployed tags: {string.Join(",", operation.DeployedTags)})[/]" : ""; var operationNode = node.AddNode($"Operation '{operation.Hash}'{publishingInfo}"); @@ -89,10 +71,10 @@ public static IHasTreeNodes AddPersistedQueryValidationErrors( var errorLocation = string.Empty; if (err.Locations is { Count: > 0 } locations) { - errorLocation = $"({locations[0].Line}:{locations[0].Column})"; + errorLocation = $" [dim]({locations[0].Line}:{locations[0].Column})[/]"; } - operationNode.AddNode($"{err.Message.EscapeMarkup()} {errorLocation}"); + operationNode.AddNode(err.Message.AsError() + errorLocation); } } @@ -107,7 +89,7 @@ public static IHasTreeNodes AddOpenApiCollectionValidationErrors( { var openApiCollection = collectionError.OpenApiCollection; var collectionNode = node.AddNode( - $"OpenAPI collection '{openApiCollection?.Name.EscapeMarkup()}' (ID: {openApiCollection?.Id})"); + $"OpenAPI collection '{openApiCollection?.Name.EscapeMarkup()}' [dim](ID: {openApiCollection?.Id})[/]"); foreach (var entity in collectionError.Entities) { @@ -120,14 +102,14 @@ public static IHasTreeNodes AddOpenApiCollectionValidationErrors( var errorLocation = string.Empty; if (documentError.Locations is { Count: > 0 } locations) { - errorLocation = $"({locations[0].Line}:{locations[0].Column})"; + errorLocation = $" [dim]({locations[0].Line}:{locations[0].Column})[/]"; } - entityNode.AddNode($"{documentError.Message.EscapeMarkup()} {errorLocation}"); + entityNode.AddNode(documentError.Message.AsError() + errorLocation); } else if (entityError is IOpenApiCollectionValidationEntityValidationError entityValidationError) { - entityNode.AddNode(entityValidationError.Message.EscapeMarkup()); + entityNode.AddErrorMessage(entityValidationError.Message); } else { @@ -158,7 +140,7 @@ public static IHasTreeNodes AddMcpFeatureCollectionValidationErrors( { var mcpFeatureCollection = collectionError.McpFeatureCollection; var collectionNode = node.AddNode( - $"MCP Feature Collection '{mcpFeatureCollection?.Name.EscapeMarkup()}' (ID: {mcpFeatureCollection?.Id})"); + $"MCP Feature Collection '{mcpFeatureCollection?.Name.EscapeMarkup()}' [dim](ID: {mcpFeatureCollection?.Id})[/]"); foreach (var entity in collectionError.Entities) { @@ -171,14 +153,14 @@ public static IHasTreeNodes AddMcpFeatureCollectionValidationErrors( var errorLocation = string.Empty; if (documentError.Locations is { Count: > 0 } locations) { - errorLocation = $"({locations[0].Line}:{locations[0].Column})"; + errorLocation = $" [dim]({locations[0].Line}:{locations[0].Column})[/]"; } - entityNode.AddNode($"{documentError.Message.EscapeMarkup()} {errorLocation}"); + entityNode.AddNode(documentError.Message.AsError() + errorLocation); } else if (entityError is IMcpFeatureCollectionValidationEntityValidationError entityValidationError) { - entityNode.AddNode(entityValidationError.Message.EscapeMarkup()); + entityNode.AddErrorMessage(entityValidationError.Message); } else { diff --git a/src/Nitro/CommandLine/src/CommandLine/Helpers/Constants.cs b/src/Nitro/CommandLine/src/CommandLine/Helpers/Constants.cs index 1c61cbf2263..835e085040f 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Helpers/Constants.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Helpers/Constants.cs @@ -2,6 +2,8 @@ namespace ChilliCream.Nitro.CommandLine.Helpers; internal static class Constants { + public const int DefaultPrintWidth = 1_000; + // 5 Minutes public const int DefaultTimeoutSec = 60 * 5; diff --git a/src/Nitro/CommandLine/src/CommandLine/Program.cs b/src/Nitro/CommandLine/src/CommandLine/Program.cs index bdc82ebbcbf..6847bef849f 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Program.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Program.cs @@ -32,15 +32,28 @@ public static async Task Main(string[] args) services.AddSingleton(sp => sp.GetRequiredService()); services.AddNitroClients(); + var outConsole = AnsiConsole.Console; var errorConsole = AnsiConsole.Create(new AnsiConsoleSettings { Out = new AnsiConsoleOutput(Console.Error) }); + // When output is not a terminal (CI, pipes), Spectre.Console defaults + // to 80 chars width. Use a wide width so the consumer handles wrapping. + if (Console.IsOutputRedirected) + { + outConsole.Profile.Width = Constants.DefaultPrintWidth; + } + + if (Console.IsErrorRedirected) + { + errorConsole.Profile.Width = Constants.DefaultPrintWidth; + } + services .AddSingleton(sp => new NitroConsole( - AnsiConsole.Console, + outConsole, errorConsole, sp.GetRequiredService())); diff --git a/src/Nitro/CommandLine/src/CommandLine/Services/Console/ActivityTree.cs b/src/Nitro/CommandLine/src/CommandLine/Services/Console/ActivityTree.cs index 54f1951e58f..e7b2e4a9e25 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Services/Console/ActivityTree.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Services/Console/ActivityTree.cs @@ -91,7 +91,13 @@ private void RenderEntry( RenderIcon(segments, entry); - segments.Add(new Segment(entry.Text)); + var textStyle = entry.State switch + { + ActivityState.Failed => new Style(Color.Red), + ActivityState.Warning => new Style(Color.Yellow), + _ => Style.Plain + }; + segments.Add(new Segment(entry.Text, textStyle)); segments.Add(Segment.LineBreak); for (var i = 0; i < entry.Children.Count; i++) diff --git a/src/Nitro/CommandLine/src/CommandLine/Services/Console/INitroConsoleActivity.cs b/src/Nitro/CommandLine/src/CommandLine/Services/Console/INitroConsoleActivity.cs index 2d4789f141b..0b92d38129f 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Services/Console/INitroConsoleActivity.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Services/Console/INitroConsoleActivity.cs @@ -4,9 +4,7 @@ namespace ChilliCream.Nitro.CommandLine; internal interface INitroConsoleActivity : IAsyncDisposable { - void Update(string message, ActivityUpdateKind kind = ActivityUpdateKind.Regular); - - void Update(string message, IRenderable details, ActivityUpdateKind kind = ActivityUpdateKind.Regular); + void Update(string message, ActivityUpdateKind kind = ActivityUpdateKind.Regular, IRenderable? details = null); void Warning(string message); diff --git a/src/Nitro/CommandLine/src/CommandLine/Services/Console/InteractiveNitroConsoleActivity.cs b/src/Nitro/CommandLine/src/CommandLine/Services/Console/InteractiveNitroConsoleActivity.cs index 6dff99934e7..84a4b629aea 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Services/Console/InteractiveNitroConsoleActivity.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Services/Console/InteractiveNitroConsoleActivity.cs @@ -25,19 +25,10 @@ private InteractiveNitroConsoleActivity( _refreshTimer = refreshTimer; } - public void Update(string message, ActivityUpdateKind kind = ActivityUpdateKind.Regular) - { - var state = kind switch - { - ActivityUpdateKind.Warning => ActivityState.Warning, - ActivityUpdateKind.Waiting => ActivityState.Waiting, - ActivityUpdateKind.Success => ActivityState.Completed, - _ => ActivityState.Info - }; - _tree.AddChild(_rootEntry, message, state); - } - - public void Update(string message, IRenderable details, ActivityUpdateKind kind = ActivityUpdateKind.Regular) + public void Update( + string message, + ActivityUpdateKind kind = ActivityUpdateKind.Regular, + IRenderable? details = null) { var state = kind switch { @@ -47,7 +38,10 @@ public void Update(string message, IRenderable details, ActivityUpdateKind kind _ => ActivityState.Info }; var child = _tree.AddChild(_rootEntry, message, state); - _tree.SetEntryDetails(child, details); + if (details is not null) + { + _tree.SetEntryDetails(child, details); + } } public void Warning(string message) diff --git a/src/Nitro/CommandLine/src/CommandLine/Services/Console/InteractiveNitroConsoleChildActivity.cs b/src/Nitro/CommandLine/src/CommandLine/Services/Console/InteractiveNitroConsoleChildActivity.cs index e26aafbb002..aed50026b1c 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Services/Console/InteractiveNitroConsoleChildActivity.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Services/Console/InteractiveNitroConsoleChildActivity.cs @@ -11,19 +11,10 @@ internal sealed class InteractiveNitroConsoleChildActivity( { private bool _completed; - public void Update(string message, ActivityUpdateKind kind = ActivityUpdateKind.Regular) - { - var state = kind switch - { - ActivityUpdateKind.Warning => ActivityState.Warning, - ActivityUpdateKind.Waiting => ActivityState.Waiting, - ActivityUpdateKind.Success => ActivityState.Completed, - _ => ActivityState.Info - }; - tree.AddChild(entry, message, state); - } - - public void Update(string message, IRenderable details, ActivityUpdateKind kind = ActivityUpdateKind.Regular) + public void Update( + string message, + ActivityUpdateKind kind = ActivityUpdateKind.Regular, + IRenderable? details = null) { var state = kind switch { @@ -33,7 +24,10 @@ public void Update(string message, IRenderable details, ActivityUpdateKind kind _ => ActivityState.Info }; var child = tree.AddChild(entry, message, state); - tree.SetEntryDetails(child, details); + if (details is not null) + { + tree.SetEntryDetails(child, details); + } } public void Warning(string message) diff --git a/src/Nitro/CommandLine/src/CommandLine/Services/Console/NitroConsole.cs b/src/Nitro/CommandLine/src/CommandLine/Services/Console/NitroConsole.cs index c03b8a3cc02..46a38aac68c 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Services/Console/NitroConsole.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Services/Console/NitroConsole.cs @@ -1,4 +1,3 @@ -using ChilliCream.Nitro.CommandLine.Helpers; using ChilliCream.Nitro.CommandLine.Results; using ChilliCream.Nitro.CommandLine.Services; using Spectre.Console.Rendering; @@ -6,7 +5,7 @@ namespace ChilliCream.Nitro.CommandLine; internal sealed class NitroConsole( - IAnsiConsole console, + IAnsiConsole outConsole, IAnsiConsole errorConsole, IEnvironmentVariableProvider environmentVariables) : INitroConsole @@ -15,14 +14,14 @@ internal sealed class NitroConsole( private bool _hasWrittenOutput; public bool IsInteractive => - console.Profile.Capabilities.Interactive + outConsole.Profile.Capabilities.Interactive && !IsNonInteractiveEnvironment(); public bool IsHumanReadable => _outputFormat is null; public bool HasWrittenOutput => _hasWrittenOutput; - public IAnsiConsole Out => console; + public IAnsiConsole Out => outConsole; public IAnsiConsole Error => errorConsole; @@ -35,7 +34,7 @@ public void Clear(bool home) { if (IsHumanReadable) { - console.Clear(home); + outConsole.Clear(home); } } @@ -44,7 +43,7 @@ public void Write(IRenderable renderable) if (IsHumanReadable) { _hasWrittenOutput = true; - console.Write(renderable); + outConsole.Write(renderable); return; } @@ -58,20 +57,20 @@ public void Write(IRenderable renderable) + "Check the documentation of the command to see all options"); } - public Profile Profile => console.Profile; + public Profile Profile => outConsole.Profile; - public IAnsiConsoleCursor Cursor => console.Cursor; + public IAnsiConsoleCursor Cursor => outConsole.Cursor; - public IAnsiConsoleInput Input => console.Input; + public IAnsiConsoleInput Input => outConsole.Input; public IExclusivityMode ExclusivityMode => IsInteractive - ? console.ExclusivityMode + ? outConsole.ExclusivityMode : throw new ExitException( "Console runs in non interactive mode, yet a user interaction was attempted. " + "Check the documentation of the command to see all options"); - public RenderPipeline Pipeline => console.Pipeline; + public RenderPipeline Pipeline => outConsole.Pipeline; private bool IsNonInteractiveEnvironment() { diff --git a/src/Nitro/CommandLine/src/CommandLine/Services/Console/NitroConsoleActivity.cs b/src/Nitro/CommandLine/src/CommandLine/Services/Console/NitroConsoleActivity.cs index a4a4e29715c..b2f8d9f7f93 100644 --- a/src/Nitro/CommandLine/src/CommandLine/Services/Console/NitroConsoleActivity.cs +++ b/src/Nitro/CommandLine/src/CommandLine/Services/Console/NitroConsoleActivity.cs @@ -12,7 +12,10 @@ internal sealed class NitroConsoleActivity( { private bool _completed; - public void Update(string message, ActivityUpdateKind kind = ActivityUpdateKind.Regular) + public void Update( + string message, + ActivityUpdateKind kind = ActivityUpdateKind.Regular, + IRenderable? details = null) { var glyph = kind switch { @@ -21,25 +24,20 @@ public void Update(string message, ActivityUpdateKind kind = ActivityUpdateKind. ActivityUpdateKind.Success => Glyphs.Check.Space(), _ => "" }; - console.MarkupLine(prefix + "├── " + glyph + message); - } - - public void Update(string message, IRenderable details, ActivityUpdateKind kind = ActivityUpdateKind.Regular) - { - var glyph = kind switch + if (kind == ActivityUpdateKind.Warning) { - ActivityUpdateKind.Warning => Glyphs.ExclamationMark.Space(), - ActivityUpdateKind.Waiting => Glyphs.Clock.Space(), - ActivityUpdateKind.Success => Glyphs.Check.Space(), - _ => "" - }; + message = message.AsWarning(); + } console.MarkupLine(prefix + "├── " + glyph + message); - WriteIndented(details, prefix + "│ "); + if (details is not null) + { + WriteIndented(details, prefix + "│ "); + } } public void Warning(string message) { - Complete(Glyphs.ExclamationMark.Space() + message); + Complete(Glyphs.ExclamationMark.Space() + message.AsWarning()); } public void Success(string message) @@ -49,7 +47,7 @@ public void Success(string message) public void Fail(string message) { - Complete(Glyphs.Cross.Space() + message); + Complete(Glyphs.Cross.Space() + message.AsError()); } public void Fail(IRenderable details) @@ -59,7 +57,7 @@ public void Fail(IRenderable details) return; } - console.MarkupLine(prefix + "└── " + Glyphs.Cross.Space() + failureMessage); + console.MarkupLine(prefix + "└── " + Glyphs.Cross.Space() + failureMessage.AsError()); WriteIndented(details, prefix + " "); _completed = true; } @@ -115,8 +113,15 @@ public static INitroConsoleActivity Start( private void WriteIndented(IRenderable renderable, string linePrefix) { + var availableWidth = console.Profile.Width - linePrefix.Length; + + if (availableWidth <= 0) + { + return; + } + var options = RenderOptions.Create(console, console.Profile.Capabilities); - var segments = renderable.Render(options, console.Profile.Width); + var segments = renderable.Render(options, availableWidth); var lineBuffer = new System.Text.StringBuilder(); diff --git a/src/Nitro/CommandLine/test/CommandLine.Tests/Commands/CommandTestBase.cs b/src/Nitro/CommandLine/test/CommandLine.Tests/Commands/CommandTestBase.cs index 3355428999c..2a19aa928e2 100644 --- a/src/Nitro/CommandLine/test/CommandLine.Tests/Commands/CommandTestBase.cs +++ b/src/Nitro/CommandLine/test/CommandLine.Tests/Commands/CommandTestBase.cs @@ -13,6 +13,7 @@ using ChilliCream.Nitro.Client.Schemas; using ChilliCream.Nitro.Client.Stages; using ChilliCream.Nitro.Client.Workspaces; +using ChilliCream.Nitro.CommandLine.Helpers; using ChilliCream.Nitro.CommandLine.Services; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; @@ -96,11 +97,11 @@ protected async Task ExecuteCommandAsync(params string[] args) var outConsole = new TestConsole(); outConsole.Profile.Out = new AnsiConsoleOutput(stdOutWriter); - outConsole.Profile.Width = 10_000; + outConsole.Profile.Width = Constants.DefaultPrintWidth; var errConsole = new TestConsole(); errConsole.Profile.Out = new AnsiConsoleOutput(stdErrWriter); - errConsole.Profile.Width = 10_000; + errConsole.Profile.Width = Constants.DefaultPrintWidth; if (_interactionMode is InteractionMode.JsonOutput) { @@ -153,12 +154,12 @@ internal InteractiveCommand StartInteractiveCommand(params string[] args) var outConsole = new TestConsole(); outConsole.Profile.Out = new AnsiConsoleOutput(stdOutWriter); - outConsole.Profile.Width = 10_000; + outConsole.Profile.Width = Constants.DefaultPrintWidth; outConsole.Profile.Capabilities.Interactive = true; var errConsole = new TestConsole(); errConsole.Profile.Out = new AnsiConsoleOutput(stdErrWriter); - errConsole.Profile.Width = 10_000; + errConsole.Profile.Width = Constants.DefaultPrintWidth; var console = new NitroConsole(outConsole, errConsole, _environmentVariableProviderMock.Object); var services = BuildServices(console);