diff --git a/src/Aspire.Cli/Commands/DeployCommand.cs b/src/Aspire.Cli/Commands/DeployCommand.cs index 9f483bd0eb4..d5b23482240 100644 --- a/src/Aspire.Cli/Commands/DeployCommand.cs +++ b/src/Aspire.Cli/Commands/DeployCommand.cs @@ -51,7 +51,7 @@ protected override Task GetRunArgumentsAsync(string? fullyQualifiedOut } // Add --log-level and --envionment flags if specified - var logLevel = parseResult.GetValue(s_logLevelOption); + var logLevel = parseResult.GetValue(s_pipelineLogLevelOption); if (!string.IsNullOrEmpty(logLevel)) { diff --git a/src/Aspire.Cli/Commands/DestroyCommand.cs b/src/Aspire.Cli/Commands/DestroyCommand.cs index 6ef723c2739..85377aaefa1 100644 --- a/src/Aspire.Cli/Commands/DestroyCommand.cs +++ b/src/Aspire.Cli/Commands/DestroyCommand.cs @@ -52,7 +52,7 @@ protected override Task GetRunArgumentsAsync(string? fullyQualifiedOut baseArgs.AddRange(["--yes", "true"]); } - var logLevel = parseResult.GetValue(s_logLevelOption); + var logLevel = parseResult.GetValue(s_pipelineLogLevelOption); if (!string.IsNullOrEmpty(logLevel)) { baseArgs.AddRange(["--log-level", logLevel!]); diff --git a/src/Aspire.Cli/Commands/DoCommand.cs b/src/Aspire.Cli/Commands/DoCommand.cs index 6b4bbacfe9f..51922787000 100644 --- a/src/Aspire.Cli/Commands/DoCommand.cs +++ b/src/Aspire.Cli/Commands/DoCommand.cs @@ -76,7 +76,7 @@ protected override async Task GetRunArgumentsAsync(string? fullyQualif } // Add --log-level and --environment flags if specified - var logLevel = parseResult.GetValue(s_logLevelOption); + var logLevel = parseResult.GetValue(s_pipelineLogLevelOption); if (!string.IsNullOrEmpty(logLevel)) { baseArgs.AddRange(["--log-level", logLevel!]); diff --git a/src/Aspire.Cli/Commands/PipelineCommandBase.cs b/src/Aspire.Cli/Commands/PipelineCommandBase.cs index 22e0491bccc..059af62583a 100644 --- a/src/Aspire.Cli/Commands/PipelineCommandBase.cs +++ b/src/Aspire.Cli/Commands/PipelineCommandBase.cs @@ -41,7 +41,7 @@ internal abstract class PipelineCommandBase : BaseCommand private readonly Option _outputPathOption; - protected static readonly Option s_logLevelOption = new("--log-level") + protected static readonly Option s_pipelineLogLevelOption = new("--pipeline-log-level") { Description = SharedCommandStrings.PipelineLogLevelOptionDescription }; @@ -97,7 +97,7 @@ protected PipelineCommandBase(string name, string description, IDotNetCliRunner Options.Add(s_appHostOption); Options.Add(_outputPathOption); - Options.Add(s_logLevelOption); + Options.Add(s_pipelineLogLevelOption); Options.Add(s_environmentOption); Options.Add(s_includeExceptionDetailsOption); Options.Add(s_noBuildOption); @@ -281,7 +281,7 @@ protected override async Task ExecuteAsync(ParseResult parseResul var publishingActivities = backchannel.GetPublishingActivitiesAsync(cancellationToken); // Check if debug or trace logging is enabled - var logLevel = parseResult.GetValue(s_logLevelOption); + var logLevel = parseResult.GetValue(s_pipelineLogLevelOption); var isDebugOrTraceLoggingEnabled = logLevel?.Equals("debug", StringComparison.OrdinalIgnoreCase) == true || logLevel?.Equals("trace", StringComparison.OrdinalIgnoreCase) == true; diff --git a/src/Aspire.Cli/Commands/PublishCommand.cs b/src/Aspire.Cli/Commands/PublishCommand.cs index fa49949f61a..c471afb12ea 100644 --- a/src/Aspire.Cli/Commands/PublishCommand.cs +++ b/src/Aspire.Cli/Commands/PublishCommand.cs @@ -59,7 +59,7 @@ protected override Task GetRunArgumentsAsync(string? fullyQualifiedOut } // Add --log-level and --envionment flags if specified - var logLevel = parseResult.GetValue(s_logLevelOption); + var logLevel = parseResult.GetValue(s_pipelineLogLevelOption); if (!string.IsNullOrEmpty(logLevel)) { diff --git a/src/Aspire.Cli/Commands/TelemetryCommandHelpers.cs b/src/Aspire.Cli/Commands/TelemetryCommandHelpers.cs index 98a071f194e..0623c8dc698 100644 --- a/src/Aspire.Cli/Commands/TelemetryCommandHelpers.cs +++ b/src/Aspire.Cli/Commands/TelemetryCommandHelpers.cs @@ -212,7 +212,8 @@ public static async Task GetDashboardApiAsync( var loginToken = McpToolHelpers.ExtractLoginToken(dashboardUrl); // Normalize login URLs (e.g., http://localhost:18888/login?t=abc) to base URL - dashboardUrl = McpToolHelpers.StripLoginPath(dashboardUrl) ?? dashboardUrl; + var displayDashboardUrl = McpToolHelpers.StripLoginPath(dashboardUrl) ?? dashboardUrl; + dashboardUrl = McpToolHelpers.NormalizeDashboardUrl(displayDashboardUrl); if (!UrlHelper.IsHttpUrl(dashboardUrl)) { @@ -235,10 +236,10 @@ public static async Task GetDashboardApiAsync( var errorInfo = exchangeResult.FailureKind switch { TokenExchangeFailureKind.ConnectionError => new TelemetryErrorInfo( - string.Format(CultureInfo.CurrentCulture, TelemetryCommandStrings.DashboardConnectionFailed, dashboardUrl), + string.Format(CultureInfo.CurrentCulture, TelemetryCommandStrings.DashboardConnectionFailed, displayDashboardUrl), TelemetryCommandStrings.DashboardConnectionFailedHint), TokenExchangeFailureKind.ApiNotEnabled => new TelemetryErrorInfo( - string.Format(CultureInfo.CurrentCulture, TelemetryCommandStrings.DashboardApiNotEnabled, dashboardUrl), + string.Format(CultureInfo.CurrentCulture, TelemetryCommandStrings.DashboardApiNotEnabled, displayDashboardUrl), TelemetryCommandStrings.DashboardApiNotEnabledHint), _ => new TelemetryErrorInfo( TelemetryCommandStrings.DashboardLoginTokenFailed, @@ -253,7 +254,7 @@ public static async Task GetDashboardApiAsync( } var token = apiKey ?? string.Empty; - return new DashboardApiResult(true, null, dashboardUrl, token, dashboardUrl, 0); + return new DashboardApiResult(true, null, dashboardUrl, token, displayDashboardUrl, 0); } var result = await connectionResolver.ResolveConnectionAsync( @@ -287,10 +288,13 @@ public static async Task GetDashboardApiAsync( return new DashboardApiResult(true, connection, null, null, null, 0); } - // Extract dashboard base URL (without /login path) for hyperlinks + var apiBaseUrl = McpToolHelpers.NormalizeDashboardUrl(dashboardInfo.ApiBaseUrl); + + // Extract dashboard base URL (without /login path) for hyperlinks. + // Preserve the original hostname (e.g. *.dev.localhost) for display URLs. var extractedDashboardUrl = ExtractDashboardBaseUrl(dashboardInfo.DashboardUrls?.FirstOrDefault()); - return new DashboardApiResult(true, connection, dashboardInfo.ApiBaseUrl, dashboardInfo.ApiToken, extractedDashboardUrl, 0); + return new DashboardApiResult(true, connection, apiBaseUrl, dashboardInfo.ApiToken, extractedDashboardUrl, 0); } /// diff --git a/src/Aspire.Cli/Mcp/Tools/IDashboardInfoProvider.cs b/src/Aspire.Cli/Mcp/Tools/IDashboardInfoProvider.cs index de2c6b215ed..271e83fe823 100644 --- a/src/Aspire.Cli/Mcp/Tools/IDashboardInfoProvider.cs +++ b/src/Aspire.Cli/Mcp/Tools/IDashboardInfoProvider.cs @@ -49,6 +49,9 @@ internal sealed class StaticDashboardInfoProvider(string dashboardUrl, string? a { // For unsecured dashboards, apiToken is empty string (no X-API-Key header will be sent) var apiToken = apiKey ?? string.Empty; - return Task.FromResult((apiToken, dashboardUrl, (string?)dashboardUrl)); + // Normalize the API base URL (e.g., rewrite *.localhost to localhost) for HTTP requests, + // but preserve the original URL as the dashboard display URL. + var apiBaseUrl = McpToolHelpers.NormalizeDashboardUrl(dashboardUrl); + return Task.FromResult((apiToken, apiBaseUrl, (string?)dashboardUrl)); } } diff --git a/src/Aspire.Cli/Mcp/Tools/McpToolHelpers.cs b/src/Aspire.Cli/Mcp/Tools/McpToolHelpers.cs index 5d3cd971edc..5eb6697ed41 100644 --- a/src/Aspire.Cli/Mcp/Tools/McpToolHelpers.cs +++ b/src/Aspire.Cli/Mcp/Tools/McpToolHelpers.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Globalization; using System.Web; using Aspire.Cli.Backchannel; using Microsoft.Extensions.Logging; @@ -26,9 +27,10 @@ internal static class McpToolHelpers throw new McpProtocolException(McpErrorMessages.DashboardNotAvailable, McpErrorCode.InternalError); } + var apiBaseUrl = NormalizeDashboardUrl(dashboardInfo.ApiBaseUrl); var dashboardBaseUrl = StripLoginPath(dashboardInfo.DashboardUrls.FirstOrDefault()); - return (dashboardInfo.ApiToken, dashboardInfo.ApiBaseUrl, dashboardBaseUrl); + return (dashboardInfo.ApiToken, apiBaseUrl, dashboardBaseUrl); } /// @@ -59,6 +61,31 @@ internal static class McpToolHelpers return url; } + /// + /// Replaces AppHost-scoped *.localhost dashboard hostnames with localhost. + /// + /// + /// DNS resolvers typically don't implement RFC 6761 for localhost subdomains, so hosts + /// like dashboard.dev.localhost fail to resolve when making HTTP requests. + /// Rewriting to localhost ensures the CLI can reach the dashboard API. + /// + internal static string NormalizeDashboardUrl(string url) + { + if (Uri.TryCreate(url, UriKind.Absolute, out var uri) && IsLocalhostTld(uri.Host)) + { + var port = uri.IsDefaultPort ? string.Empty : ":" + uri.Port.ToString(CultureInfo.InvariantCulture); + var pathAndQuery = uri.PathAndQuery == "/" ? string.Empty : uri.PathAndQuery; + return $"{uri.Scheme}://localhost{port}{pathAndQuery}{uri.Fragment}"; + } + + return url; + } + + private static bool IsLocalhostTld(string host) + { + return host.EndsWith(".localhost", StringComparison.OrdinalIgnoreCase); + } + /// /// Extracts the browser token (t query parameter) from a dashboard login URL. /// Returns null if the URL does not contain a login token. diff --git a/src/Aspire.Cli/Resources/ConsoleActivityLoggerStrings.resx b/src/Aspire.Cli/Resources/ConsoleActivityLoggerStrings.resx index bc94d5ec25b..ae77a331101 100644 --- a/src/Aspire.Cli/Resources/ConsoleActivityLoggerStrings.resx +++ b/src/Aspire.Cli/Resources/ConsoleActivityLoggerStrings.resx @@ -142,7 +142,7 @@ Total time: {0} - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. Pipeline succeeded diff --git a/src/Aspire.Cli/Resources/DestroyCommandStrings.Designer.cs b/src/Aspire.Cli/Resources/DestroyCommandStrings.Designer.cs index 9e274b7fa65..ce7a3d07cbc 100644 --- a/src/Aspire.Cli/Resources/DestroyCommandStrings.Designer.cs +++ b/src/Aspire.Cli/Resources/DestroyCommandStrings.Designer.cs @@ -77,6 +77,15 @@ public static string Description { return ResourceManager.GetString("Description", resourceCulture); } } + + /// + /// Looks up a localized string similar to The destroy command requires --yes when the --non-interactive option is specified.. + /// + public static string NonInteractiveRequiresYes { + get { + return ResourceManager.GetString("NonInteractiveRequiresYes", resourceCulture); + } + } /// /// Looks up a localized string similar to The output path containing the deployment artifacts to destroy. diff --git a/src/Aspire.Cli/Resources/DestroyCommandStrings.resx b/src/Aspire.Cli/Resources/DestroyCommandStrings.resx index 100ee049646..2ec53883419 100644 --- a/src/Aspire.Cli/Resources/DestroyCommandStrings.resx +++ b/src/Aspire.Cli/Resources/DestroyCommandStrings.resx @@ -120,6 +120,9 @@ Destroy a previously deployed AppHost environment + + The destroy command requires --yes when the --non-interactive option is specified. + The output path containing the deployment artifacts to destroy diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.cs.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.cs.xlf index e3e0fc298d0..33e925f96f4 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.cs.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.cs.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.de.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.de.xlf index 06c34c4d90c..246b75c6444 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.de.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.de.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.es.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.es.xlf index e79324d9024..e72da85d15c 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.es.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.es.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.fr.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.fr.xlf index 6cd3079bc6c..75d1b73631b 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.fr.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.fr.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.it.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.it.xlf index 7dbff355dac..4c341dc69a9 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.it.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.it.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ja.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ja.xlf index 4af67e91e1c..dd9fc4c55f1 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ja.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ja.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ko.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ko.xlf index c3b71aad0a5..8c1742b8795 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ko.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ko.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pl.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pl.xlf index 5880d393b36..27dd79642cc 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pl.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pl.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pt-BR.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pt-BR.xlf index 15e925dca42..f713f03452a 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pt-BR.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pt-BR.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ru.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ru.xlf index 87d4549ec29..c6a0ec261c8 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ru.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ru.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.tr.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.tr.xlf index 7ef79f49636..78b980245b0 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.tr.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.tr.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hans.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hans.xlf index 5f2913d3015..880a8c3b544 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hans.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hans.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hant.xlf b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hant.xlf index 546b51d340a..6d87125da9b 100644 --- a/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hant.xlf +++ b/src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hant.xlf @@ -28,8 +28,8 @@ - For more details, add --log-level debug/trace to the command. - For more details, add --log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. + For more details, add --pipeline-log-level debug/trace to the command. diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.cs.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.cs.xlf index 48da67a109c..1e551982270 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.cs.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.cs.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.de.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.de.xlf index df5bf2e6a9d..84b3c97f797 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.de.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.de.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.es.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.es.xlf index b995cf91d66..cf78b4372e8 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.es.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.es.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.fr.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.fr.xlf index d9401becd59..04c3d946b26 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.fr.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.fr.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.it.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.it.xlf index 059e9f17469..99d0283c7fa 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.it.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.it.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ja.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ja.xlf index 716194c88c8..02cbe72852a 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ja.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ja.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ko.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ko.xlf index 9d29d2b951e..c7f2b33c515 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ko.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ko.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pl.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pl.xlf index 6e060b3da83..8a6207d832c 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pl.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pl.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pt-BR.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pt-BR.xlf index 34de3f29af0..6be6038832d 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pt-BR.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pt-BR.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ru.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ru.xlf index 37c58b0151a..ece50752fc3 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ru.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ru.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.tr.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.tr.xlf index 83ef3c0744f..892f99d6a74 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.tr.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.tr.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hans.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hans.xlf index 435374929a4..d721ff197cf 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hans.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hans.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hant.xlf b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hant.xlf index d71a665ec02..86e8fd1a603 100644 --- a/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hant.xlf +++ b/src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hant.xlf @@ -12,6 +12,11 @@ The destroy operation was canceled. + + The destroy command requires --yes when the --non-interactive option is specified. + The destroy command requires --yes when the --non-interactive option is specified. + + Destroy completed Destroy completed diff --git a/src/Aspire.Dashboard/Components/App.razor b/src/Aspire.Dashboard/Components/App.razor index b3ae5d33d89..dbb3e5acd93 100644 --- a/src/Aspire.Dashboard/Components/App.razor +++ b/src/Aspire.Dashboard/Components/App.razor @@ -4,6 +4,8 @@ + + @@ -32,9 +34,17 @@ @* Use Blazor JS shipped in dashboard's wwwroot. This is done because the dashboard is currently built for .NET 8, and in .NET 8 the Blazor JS is embedded in the components assembly. But in .NET 10 and later the Blazor JS file is an asset. We can rely on Blazor JS always being available. Remove and use asset file in the future once .NET 10 is the minimum version. - This file is copied from .NET 10 P4. + - The framework/10 copy is from .NET 10 P4. + - The framework/11 copy is from .NET 11 P4. *@ - + @if (Environment.Version.Major >= 11) + { + + } + else + { + + } diff --git a/src/Aspire.Dashboard/Components/Controls/SpanDetails.razor b/src/Aspire.Dashboard/Components/Controls/SpanDetails.razor index 207e2c59031..9cd43a3e7ee 100644 --- a/src/Aspire.Dashboard/Components/Controls/SpanDetails.razor +++ b/src/Aspire.Dashboard/Components/Controls/SpanDetails.razor @@ -8,11 +8,11 @@ {
- @((MarkupString)string.Format(ControlsStrings.SpanDetailsResource, ViewModel.Span.Source.Resource.ResourceName)) + @Loc[nameof(ControlsStrings.SpanDetailsResourceLabel)] @ViewModel.Span.Source.Resource.ResourceName
- @((MarkupString)string.Format(ControlsStrings.SpanDetailsDuration, DurationFormatter.FormatDuration(ViewModel.Span.Duration, CultureInfo.CurrentCulture))) + @Loc[nameof(ControlsStrings.SpanDetailsDurationLabel)] @DurationFormatter.FormatDuration(ViewModel.Span.Duration, CultureInfo.CurrentCulture)
@@ -21,7 +21,7 @@ var startTime = ViewModel.Span.StartTime - ViewModel.Span.Trace.FirstSpan.StartTime; var formattedStartTime = startTime > TimeSpan.Zero ? DurationFormatter.FormatDuration(startTime, CultureInfo.CurrentCulture) : $"0{DurationFormatter.GetUnit(ViewModel.Span.Duration)}"; } - @((MarkupString)string.Format(ControlsStrings.SpanDetailsStartTime, formattedStartTime)) + @Loc[nameof(ControlsStrings.SpanDetailsStartTimeLabel)] @formattedStartTime
- @((MarkupString)string.Format(ControlsStrings.StructuredLogsDetailsResource, ViewModel.LogEntry.ResourceView.Resource.ResourceName)) + @Loc[nameof(ControlsStrings.StructuredLogsDetailsResourceLabel)] @ViewModel.LogEntry.ResourceView.Resource.ResourceName
- @((MarkupString)string.Format(ControlsStrings.StructuredLogsDetailsTimestamp, FormatHelpers.FormatTimeWithOptionalDate(TimeProvider, ViewModel.LogEntry.TimeStamp, MillisecondsDisplay.Truncated))) + @Loc[nameof(ControlsStrings.StructuredLogsDetailsTimestampLabel)] @FormatHelpers.FormatTimeWithOptionalDate(TimeProvider, ViewModel.LogEntry.TimeStamp, MillisecondsDisplay.Truncated)
Entry.Intent switch { MessageIntent.Success => "intent-success", @@ -55,7 +58,7 @@ private async Task HandlePrimaryAction() try { Dialog.Hide(); - await primaryAction.OnClick(); + await primaryAction.OnClick(Services); } finally { diff --git a/src/Aspire.Dashboard/Configuration/DashboardOptions.cs b/src/Aspire.Dashboard/Configuration/DashboardOptions.cs index 3b83e9a7f59..de0cb86cce2 100644 --- a/src/Aspire.Dashboard/Configuration/DashboardOptions.cs +++ b/src/Aspire.Dashboard/Configuration/DashboardOptions.cs @@ -303,6 +303,7 @@ public sealed class TelemetryLimitOptions public int MaxAttributeCount { get; set; } = 128; public int MaxAttributeLength { get; set; } = int.MaxValue; public int MaxSpanEventCount { get; set; } = int.MaxValue; + public int MaxResourceCount { get; set; } = 10_000; } public sealed class UIOptions diff --git a/src/Aspire.Dashboard/Model/DashboardCommandExecutor.cs b/src/Aspire.Dashboard/Model/DashboardCommandExecutor.cs index 8780a7ced8d..2c25c54d93f 100644 --- a/src/Aspire.Dashboard/Model/DashboardCommandExecutor.cs +++ b/src/Aspire.Dashboard/Model/DashboardCommandExecutor.cs @@ -171,7 +171,7 @@ public async Task ExecuteAsyncCore(ResourceViewModel resource, CommandViewModel if (response.Result is not null) { toastParameters.PrimaryAction = loc[nameof(Dashboard.Resources.Resources.ResourceCommandViewResponse)]; - toastParameters.OnPrimaryAction = EventCallback.Factory.Create(this, () => OpenViewResponseDialogAsync(command, response)); + toastParameters.OnPrimaryAction = EventCallback.Factory.Create(this, () => OpenViewResponseDialogAsync(dialogService, command, response)); } notificationService.ReplaceNotification(progressNotificationId, new NotificationEntry @@ -179,12 +179,12 @@ public async Task ExecuteAsyncCore(ResourceViewModel resource, CommandViewModel Title = successTitle, Body = response.Message, Intent = FluentMessageIntent.Success, - PrimaryAction = response.Result is not null ? CreateViewResponseNotificationAction(command, response) : null + PrimaryAction = response.Result is not null ? CreateViewResponseNotificationAction(loc, command, response) : null }); if (response.Result?.DisplayImmediately == true) { - await OpenViewResponseDialogAsync(command, response).ConfigureAwait(false); + await OpenViewResponseDialogAsync(dialogService, command, response).ConfigureAwait(false); } } else if (response.Kind == ResourceCommandResponseKind.Cancelled) @@ -219,7 +219,7 @@ public async Task ExecuteAsyncCore(ResourceViewModel resource, CommandViewModel if (response.Result is not null) { toastParameters.SecondaryAction = loc[nameof(Dashboard.Resources.Resources.ResourceCommandViewResponse)]; - toastParameters.OnSecondaryAction = EventCallback.Factory.Create(this, () => OpenViewResponseDialogAsync(command, response)); + toastParameters.OnSecondaryAction = EventCallback.Factory.Create(this, () => OpenViewResponseDialogAsync(dialogService, command, response)); } notificationService.ReplaceNotification(progressNotificationId, new NotificationEntry @@ -227,12 +227,12 @@ public async Task ExecuteAsyncCore(ResourceViewModel resource, CommandViewModel Title = failedTitle, Body = response.Message, Intent = FluentMessageIntent.Error, - PrimaryAction = response.Result is not null ? CreateViewResponseNotificationAction(command, response) : null + PrimaryAction = response.Result is not null ? CreateViewResponseNotificationAction(loc, command, response) : null }); if (response.Result?.DisplayImmediately == true) { - await OpenViewResponseDialogAsync(command, response).ConfigureAwait(false); + await OpenViewResponseDialogAsync(dialogService, command, response).ConfigureAwait(false); } } @@ -274,16 +274,22 @@ private static (Icon Icon, Color Color)? GetIntentIcon(ToastIntent intent) }; } - private NotificationAction CreateViewResponseNotificationAction(CommandViewModel command, ResourceCommandResponseViewModel response) + private static NotificationAction CreateViewResponseNotificationAction(IStringLocalizer loc, CommandViewModel command, ResourceCommandResponseViewModel response) { return new NotificationAction { Text = loc[nameof(Dashboard.Resources.Resources.ResourceCommandViewResponse)], - OnClick = () => OpenViewResponseDialogAsync(command, response) + OnClick = (services) => + { + // Get dialog service from passed in services since this data is long lived. + // Using the dialog service from executor could cause closure over scoped services. + var dialogService = services.GetRequiredService(); + return OpenViewResponseDialogAsync(dialogService, command, response); + } }; } - private async Task OpenViewResponseDialogAsync(CommandViewModel command, ResourceCommandResponseViewModel response) + private static async Task OpenViewResponseDialogAsync(DashboardDialogService dialogService, CommandViewModel command, ResourceCommandResponseViewModel response) { var fixedFormat = response.Result!.Format switch { diff --git a/src/Aspire.Dashboard/Model/INotificationService.cs b/src/Aspire.Dashboard/Model/INotificationService.cs index 408b7d589df..f8f744ac766 100644 --- a/src/Aspire.Dashboard/Model/INotificationService.cs +++ b/src/Aspire.Dashboard/Model/INotificationService.cs @@ -72,7 +72,7 @@ public sealed class NotificationEntry public sealed class NotificationAction { public required string Text { get; init; } - public required Func OnClick { get; init; } + public required Func OnClick { get; init; } } /// diff --git a/src/Aspire.Dashboard/Otlp/Model/OtlpHelpers.cs b/src/Aspire.Dashboard/Otlp/Model/OtlpHelpers.cs index 2e060587d66..07da1018db5 100644 --- a/src/Aspire.Dashboard/Otlp/Model/OtlpHelpers.cs +++ b/src/Aspire.Dashboard/Otlp/Model/OtlpHelpers.cs @@ -4,7 +4,6 @@ using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; using System.Text; using System.Text.Json; using System.Text.Json.Nodes; @@ -467,18 +466,23 @@ public static bool TryGetOrAddScope(Dictionary scopes, Instru // Semantically when InstrumentationScope isn't set, it is equivalent with // an empty instrumentation scope name (unknown). var name = scope?.Name ?? string.Empty; - ref var scopeRef = ref CollectionsMarshal.GetValueRefOrAddDefault(scopes, name, out _); - // Adds to dictionary if not present. - if (scopeRef == null) + if (scopes.TryGetValue(name, out s)) { - scopeRef = (scope != null) - ? new OtlpScope(scope.Name, scope.Version, scope.Attributes.ToKeyValuePairs(context)) - : OtlpScope.Empty; + return true; + } - context.Logger.LogTrace("Added scope '{ScopeName}' to {TelemetryType}.", scopeRef.Name, telemetryType); + if (scopes.Count >= TelemetryRepository.MaxScopeCount) + { + throw new InvalidOperationException($"Scope limit of {TelemetryRepository.MaxScopeCount} reached for {telemetryType}. Scope '{name}' will not be added."); } - s = scopeRef; + s = (scope != null) + ? new OtlpScope(scope.Name, scope.Version, scope.Attributes.ToKeyValuePairs(context)) + : OtlpScope.Empty; + + scopes.Add(name, s); + + context.Logger.LogTrace("Added scope '{ScopeName}' to {TelemetryType}.", s.Name, telemetryType); return true; } catch (Exception ex) diff --git a/src/Aspire.Dashboard/Otlp/Model/OtlpInstrument.cs b/src/Aspire.Dashboard/Otlp/Model/OtlpInstrument.cs index 963e1223a91..5a97d1dce0f 100644 --- a/src/Aspire.Dashboard/Otlp/Model/OtlpInstrument.cs +++ b/src/Aspire.Dashboard/Otlp/Model/OtlpInstrument.cs @@ -5,6 +5,7 @@ using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using Aspire.Dashboard.Otlp.Model.MetricValues; +using Aspire.Dashboard.Otlp.Storage; using Google.Protobuf.Collections; using OpenTelemetry.Proto.Common.V1; @@ -63,6 +64,11 @@ public DimensionScope FindScope(RepeatedField attributes, ref KeyValue // Need to add dimensions using durable attributes instance after scope is created. if (!Dimensions.TryGetValue(comparableAttributes, out var dimension)) { + if (Dimensions.Count >= TelemetryRepository.MaxDimensionCount) + { + throw new InvalidOperationException($"Dimension limit of {TelemetryRepository.MaxDimensionCount} reached for instrument '{Summary.Name}'."); + } + dimension = CreateDimensionScope(comparableAttributes); Dimensions.Add(dimension.Attributes, dimension); } @@ -78,28 +84,35 @@ private DimensionScope CreateDimensionScope(Memory> var keys = KnownAttributeValues.Keys.Union(durableAttributes.Select(a => a.Key)).Distinct(); foreach (var key in keys) { - ref var values = ref CollectionsMarshal.GetValueRefOrAddDefault(KnownAttributeValues, key, out _); + ref var values = ref CollectionsMarshal.GetValueRefOrAddDefault(KnownAttributeValues, key, out var existed); // Adds to dictionary if not present. if (values == null) { + if (!existed && KnownAttributeValues.Count > TelemetryRepository.MaxKnownAttributeValueCount) + { + // Over limit. Remove the default entry that GetValueRefOrAddDefault added. + KnownAttributeValues.Remove(key); + continue; + } + values = new List(); // If the key is new and there are already dimensions, add an empty value because there are dimensions without this key. if (!isFirst) { - TryAddValue(values, null); + TryAddValue(values, null, TelemetryRepository.MaxKnownAttributeValuesPerKey); } } var currentDimensionValue = OtlpHelpers.GetValue(durableAttributes, key); - TryAddValue(values, currentDimensionValue); + TryAddValue(values, currentDimensionValue, TelemetryRepository.MaxKnownAttributeValuesPerKey); } return dimension; - static void TryAddValue(List values, string? value) + static void TryAddValue(List values, string? value, int maxValues) { - if (!values.Contains(value)) + if (values.Count < maxValues && !values.Contains(value)) { values.Add(value); } diff --git a/src/Aspire.Dashboard/Otlp/Model/OtlpResource.cs b/src/Aspire.Dashboard/Otlp/Model/OtlpResource.cs index c2c058901e4..9a430663769 100644 --- a/src/Aspire.Dashboard/Otlp/Model/OtlpResource.cs +++ b/src/Aspire.Dashboard/Otlp/Model/OtlpResource.cs @@ -4,7 +4,6 @@ using System.Collections.Concurrent; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; using Aspire.Dashboard.Otlp.Storage; using Google.Protobuf.Collections; using OpenTelemetry.Proto.Common.V1; @@ -45,6 +44,7 @@ public class OtlpResource : IOtlpResource public ResourceKey ResourceKey => new ResourceKey(ResourceName, InstanceId); private readonly ReaderWriterLockSlim _metricsLock = new(); + // Bounded by TelemetryRepository.MaxScopeCount. Cleared when metrics are cleared. private readonly Dictionary _meters = new(); private readonly Dictionary _instruments = new(); private readonly ConcurrentDictionary[], OtlpResourceView> _resourceViews = new(ResourceViewKeyComparer.Instance); @@ -70,7 +70,7 @@ public void AddMetrics(AddContext context, RepeatedField scopeMetr { if (!OtlpHelpers.TryGetOrAddScope(_meters, sm.Scope, Context, TelemetryType.Metrics, out var scope)) { - context.FailureCount += sm.Metrics.Count; + context.FailureCount += sm.Metrics.Sum(m => GetMetricDataPointCount(m)); continue; } @@ -86,11 +86,13 @@ public void AddMetrics(AddContext context, RepeatedField scopeMetr } var instrumentKey = new OtlpInstrumentKey(scope.Name, metric.Name); - ref var instrumentRef = ref CollectionsMarshal.GetValueRefOrAddDefault(_instruments, instrumentKey, out _); - if (instrumentRef == null) + if (_instruments.TryGetValue(instrumentKey, out var existingInstrument)) { - // Adds to dictionary if not present. - instrumentRef = new OtlpInstrument + instrument = existingInstrument; + } + else if (_instruments.Count < TelemetryRepository.MaxInstrumentCount) + { + var newInstrument = new OtlpInstrument { Summary = new OtlpInstrumentSummary { @@ -104,10 +106,15 @@ public void AddMetrics(AddContext context, RepeatedField scopeMetr Context = Context }; - Context.Logger.LogTrace("Added metric instrument '{InstrumentName}' for scope '{ScopeName}'.", instrumentRef.Summary.Name, scope.Name); - } + _instruments.Add(instrumentKey, newInstrument); + instrument = newInstrument; - instrument = instrumentRef; + Context.Logger.LogTrace("Added metric instrument '{InstrumentName}' for scope '{ScopeName}'.", instrument.Summary.Name, scope.Name); + } + else + { + throw new InvalidOperationException($"Instrument limit of {TelemetryRepository.MaxInstrumentCount} reached. Instrument '{metric.Name}' will not be added."); + } } catch (Exception ex) { @@ -127,7 +134,7 @@ public void AddMetrics(AddContext context, RepeatedField scopeMetr } } - private static int GetMetricDataPointCount(Metric metric) + internal static int GetMetricDataPointCount(Metric metric) { return metric.DataCase switch { @@ -207,6 +214,7 @@ public void ClearMetrics() try { _instruments.Clear(); + _meters.Clear(); } finally { @@ -296,6 +304,11 @@ internal OtlpResourceView GetView(RepeatedField attributes) return resourceView; } + if (_resourceViews.Count >= TelemetryRepository.MaxResourceViewCount) + { + throw new InvalidOperationException($"Resource view limit of {TelemetryRepository.MaxResourceViewCount} reached."); + } + return _resourceViews.GetOrAdd(view.Properties, view); } diff --git a/src/Aspire.Dashboard/Otlp/Storage/TelemetryRepository.cs b/src/Aspire.Dashboard/Otlp/Storage/TelemetryRepository.cs index 137edb00bc8..f2f991434a8 100644 --- a/src/Aspire.Dashboard/Otlp/Storage/TelemetryRepository.cs +++ b/src/Aspire.Dashboard/Otlp/Storage/TelemetryRepository.cs @@ -26,6 +26,13 @@ namespace Aspire.Dashboard.Otlp.Storage; public sealed partial class TelemetryRepository : IDisposable { + internal const int MaxResourceViewCount = 10_000; + internal const int MaxInstrumentCount = 10_000; + internal const int MaxScopeCount = 10_000; + internal const int MaxDimensionCount = 10_000; + internal const int MaxKnownAttributeValueCount = 10_000; + internal const int MaxKnownAttributeValuesPerKey = 10_000; + private readonly PauseManager _pauseManager; private readonly IOutgoingPeerResolver[] _outgoingPeerResolvers; private readonly ILogger _logger; @@ -46,15 +53,21 @@ public sealed partial class TelemetryRepository : IDisposable private readonly ConcurrentDictionary _resources = new(); private readonly ReaderWriterLockSlim _logsLock = new(); + // Bounded by MaxScopeCount. Cleared when all logs are cleared. private readonly Dictionary _logScopes = new(); private readonly CircularBuffer _logs; + // Bounded by _resources count * MaxAttributeCount. Cleared per-resource or when all logs are cleared. private readonly HashSet<(OtlpResource Resource, string PropertyKey)> _logPropertyKeys = new(); + // Bounded by _resources count * MaxAttributeCount. Cleared per-resource or when all traces are cleared. private readonly HashSet<(OtlpResource Resource, string PropertyKey)> _tracePropertyKeys = new(); private readonly Dictionary _resourceUnviewedErrorLogs = new(); private readonly ReaderWriterLockSlim _tracesLock = new(); + // Bounded by MaxScopeCount. Cleared when all traces are cleared. private readonly Dictionary _traceScopes = new(); private readonly CircularBuffer _traces; + // Not explicitly capped per add — bounded only by the sum of span links across in-buffer traces. + // Cleaned up on trace eviction and clear, so growth is limited by the circular buffer capacity. private readonly List _spanLinks = new(); private readonly List _peerResolverSubscriptions = new(); internal readonly OtlpContext _otlpContext; @@ -237,6 +250,14 @@ private OtlpResourceView GetOrAddResourceView(Resource resource) return (Resource: resource, IsNew: false); } + // Check resource limit before adding a new resource. + // Note: This is a soft cap. Concurrent callers may both pass this check and slightly exceed the limit + // because _resources is a ConcurrentDictionary and the count check + GetOrAdd are not atomic. + if (_resources.Count >= _otlpContext.Options.MaxResourceCount) + { + throw new InvalidOperationException($"Resource limit of {_otlpContext.Options.MaxResourceCount} reached. Resource '{key}' will not be added."); + } + // Slower get or add path. // This GetOrAdd allocates a closure, so we avoid it if possible. var newResource = false; @@ -323,7 +344,7 @@ public void AddLogs(AddContext context, RepeatedField resourceLogs } catch (Exception ex) { - context.FailureCount += rl.ScopeLogs.Count; + context.FailureCount += rl.ScopeLogs.Sum(s => s.LogRecords.Count); _otlpContext.Logger.LogInformation(ex, "Error adding resource."); continue; } @@ -792,22 +813,41 @@ public void ClearTraces(ResourceKey? resourceKey = null) { // Nothing selected, clear everything. _traces.Clear(); + _traceScopes.Clear(); + _tracePropertyKeys.Clear(); + _spanLinks.Clear(); + + foreach (var resource in _resources.Values) + { + SetResourceHasTraces(resource, false); + } } else { for (var i = _traces.Count - 1; i >= 0; i--) { + var trace = _traces[i]; // Remove trace if any span matches one of the resources. This matches filter behavior. - if (MatchResources(_traces[i], resources)) + if (MatchResources(trace, resources)) { + // Remove span links for the removed trace. + foreach (var span in trace.Spans) + { + foreach (var link in span.Links) + { + _spanLinks.Remove(link); + } + } + _traces.RemoveAt(i); continue; } } - // Update HasTraces flag for cleared resources + // Remove property keys for cleared resources. foreach (var resource in resources) { + _tracePropertyKeys.RemoveWhere(k => k.Resource.ResourceKey == resource.ResourceKey); SetResourceHasTraces(resource, false); } } @@ -836,6 +876,15 @@ public void ClearStructuredLogs(ResourceKey? resourceKey = null) { // Nothing selected, clear everything. _logs.Clear(); + _logScopes.Clear(); + _logPropertyKeys.Clear(); + + foreach (var resource in _resources.Values) + { + SetResourceHasLogs(resource, false); + } + + _resourceUnviewedErrorLogs.Clear(); } else { @@ -848,9 +897,10 @@ public void ClearStructuredLogs(ResourceKey? resourceKey = null) } } - // Update HasLogs flag for cleared resources + // Update HasLogs flag and remove property keys for cleared resources. foreach (var resource in resources) { + _logPropertyKeys.RemoveWhere(k => k.Resource.ResourceKey == resource.ResourceKey); SetResourceHasLogs(resource, false); _resourceUnviewedErrorLogs.Remove(resource.ResourceKey); } @@ -1044,7 +1094,7 @@ public void AddMetrics(AddContext context, RepeatedField resour } catch (Exception ex) { - context.FailureCount += rm.ScopeMetrics.Sum(s => s.Metrics.Count); + context.FailureCount += rm.ScopeMetrics.Sum(sm => sm.Metrics.Sum(OtlpResource.GetMetricDataPointCount)); _otlpContext.Logger.LogInformation(ex, "Error adding resource."); continue; } @@ -1294,9 +1344,17 @@ static bool TryGetTraceById(CircularBuffer traces, ReadOnlyMemory - /// Looks up a localized string similar to Duration <strong>{0}</strong>. + /// Looks up a localized string similar to Duration. /// - public static string SpanDetailsDuration { + public static string SpanDetailsDurationLabel { get { - return ResourceManager.GetString("SpanDetailsDuration", resourceCulture); + return ResourceManager.GetString("SpanDetailsDurationLabel", resourceCulture); } } @@ -1006,11 +1006,11 @@ public static string SpanDetailsLinksHeader { } /// - /// Looks up a localized string similar to Resource <strong>{0}</strong>. + /// Looks up a localized string similar to Resource. /// - public static string SpanDetailsResource { + public static string SpanDetailsResourceLabel { get { - return ResourceManager.GetString("SpanDetailsResource", resourceCulture); + return ResourceManager.GetString("SpanDetailsResourceLabel", resourceCulture); } } @@ -1051,11 +1051,11 @@ public static string SpanDetailsSpanPrefix { } /// - /// Looks up a localized string similar to Start time <strong>{0}</strong>. + /// Looks up a localized string similar to Start time. /// - public static string SpanDetailsStartTime { + public static string SpanDetailsStartTimeLabel { get { - return ResourceManager.GetString("SpanDetailsStartTime", resourceCulture); + return ResourceManager.GetString("SpanDetailsStartTimeLabel", resourceCulture); } } @@ -1150,11 +1150,11 @@ public static string StructuredLogsDetailsLogEntryHeader { } /// - /// Looks up a localized string similar to Resource <strong>{0}</strong>. + /// Looks up a localized string similar to Resource. /// - public static string StructuredLogsDetailsResource { + public static string StructuredLogsDetailsResourceLabel { get { - return ResourceManager.GetString("StructuredLogsDetailsResource", resourceCulture); + return ResourceManager.GetString("StructuredLogsDetailsResourceLabel", resourceCulture); } } @@ -1168,11 +1168,11 @@ public static string StructuredLogsDetailsResourceHeader { } /// - /// Looks up a localized string similar to Timestamp <strong>{0}</strong>. + /// Looks up a localized string similar to Timestamp. /// - public static string StructuredLogsDetailsTimestamp { + public static string StructuredLogsDetailsTimestampLabel { get { - return ResourceManager.GetString("StructuredLogsDetailsTimestamp", resourceCulture); + return ResourceManager.GetString("StructuredLogsDetailsTimestampLabel", resourceCulture); } } diff --git a/src/Aspire.Dashboard/Resources/ControlsStrings.resx b/src/Aspire.Dashboard/Resources/ControlsStrings.resx index 64599e3e356..192ace96ffc 100644 --- a/src/Aspire.Dashboard/Resources/ControlsStrings.resx +++ b/src/Aspire.Dashboard/Resources/ControlsStrings.resx @@ -192,17 +192,14 @@ State - - Resource <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified + + Resource - - Duration <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration - - Start time <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time View logs @@ -286,13 +283,11 @@ Loading... - - Resource <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified + + Resource - - Timestamp <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Timestamp URLs diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.cs.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.cs.xlf index 6cf634ebaf9..031323983e8 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.cs.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.cs.xlf @@ -512,10 +512,10 @@ Podrobnosti
- - Duration <strong>{0}</strong> - Doba trvání: <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ Odkazy - - Resource <strong>{0}</strong> - Prostředek <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Prostředek + + Resource + Resource + + Span Rozpětí @@ -552,10 +552,10 @@ Rozpětí - - Start time <strong>{0}</strong> - Čas spuštění: <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ Položka protokolu - - Resource <strong>{0}</strong> - Prostředek <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Prostředek - - Timestamp <strong>{0}</strong> - Časové razítko <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.de.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.de.xlf index d2828a0e5ec..6550c066036 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.de.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.de.xlf @@ -512,10 +512,10 @@ Details - - Duration <strong>{0}</strong> - Dauer <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ Links - - Resource <strong>{0}</strong> - Ressource <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Ressource + + Resource + Resource + + Span Span @@ -552,10 +552,10 @@ Span - - Start time <strong>{0}</strong> - Startzeit <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ Protokolleintrag - - Resource <strong>{0}</strong> - Ressource <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Ressource - - Timestamp <strong>{0}</strong> - Zeitstempel <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.es.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.es.xlf index d56e8237693..c08dce48d8d 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.es.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.es.xlf @@ -512,10 +512,10 @@ Detalles - - Duration <strong>{0}</strong> - Duración <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ Vínculos - - Resource <strong>{0}</strong> - Recurso <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Recurso + + Resource + Resource + + Span Span @@ -552,10 +552,10 @@ Span - - Start time <strong>{0}</strong> - Hora de inicio <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ Entrada del registro - - Resource <strong>{0}</strong> - Recurso <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Recurso - - Timestamp <strong>{0}</strong> - Marca de tiempo <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.fr.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.fr.xlf index a08d31d51ed..3d3cfdb16d0 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.fr.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.fr.xlf @@ -512,10 +512,10 @@ Détails - - Duration <strong>{0}</strong> - Durée <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ Liens - - Resource <strong>{0}</strong> - Ressource <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Ressource + + Resource + Resource + + Span Étendue @@ -552,10 +552,10 @@ Étendue - - Start time <strong>{0}</strong> - <strong>Heure de début : </strong> {0} - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ Entrée de journal - - Resource <strong>{0}</strong> - Ressource <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Ressource - - Timestamp <strong>{0}</strong> - Timestamp <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.it.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.it.xlf index 79514ad22a5..46a247c4bb5 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.it.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.it.xlf @@ -512,10 +512,10 @@ Dettagli - - Duration <strong>{0}</strong> - Durata <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ Collegamenti - - Resource <strong>{0}</strong> - Risorsa <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Risorsa + + Resource + Resource + + Span Span @@ -552,10 +552,10 @@ Span - - Start time <strong>{0}</strong> - Ora di inizio <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ Voce di log - - Resource <strong>{0}</strong> - Risorsa <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Risorsa - - Timestamp <strong>{0}</strong> - Timestamp <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ja.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ja.xlf index 935bdf30f9a..a37003b77e3 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ja.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ja.xlf @@ -512,10 +512,10 @@ 詳細 - - Duration <strong>{0}</strong> - 期間 <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ リンク - - Resource <strong>{0}</strong> - リソース <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource リソース + + Resource + Resource + + Span スパン @@ -552,10 +552,10 @@ スパン - - Start time <strong>{0}</strong> - 開始時刻 <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ ログ エントリ - - Resource <strong>{0}</strong> - リソース <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource リソース - - Timestamp <strong>{0}</strong> - タイムスタンプ <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ko.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ko.xlf index 6e1f067bcdc..c6cfa69bddf 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ko.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ko.xlf @@ -512,10 +512,10 @@ 세부 정보 - - Duration <strong>{0}</strong> - 기간 <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ 링크 - - Resource <strong>{0}</strong> - 리소스 <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource 리소스 + + Resource + Resource + + Span 범위 @@ -552,10 +552,10 @@ 범위 - - Start time <strong>{0}</strong> - 시작 시간 <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ 로그 항목 - - Resource <strong>{0}</strong> - 리소스 <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource 리소스 - - Timestamp <strong>{0}</strong> - 타임스탬프 <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pl.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pl.xlf index 81701dcb329..6077b55b0cc 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pl.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pl.xlf @@ -512,10 +512,10 @@ Szczegóły - - Duration <strong>{0}</strong> - Czas trwania: <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ Linki - - Resource <strong>{0}</strong> - Zasób <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Zasób + + Resource + Resource + + Span Zakres @@ -552,10 +552,10 @@ Zakres - - Start time <strong>{0}</strong> - Czas rozpoczęcia: <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ Wpis dziennika - - Resource <strong>{0}</strong> - Zasób <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Zasób - - Timestamp <strong>{0}</strong> - Sygnatura czasowa <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pt-BR.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pt-BR.xlf index 49d6196ed6d..e2a26436b44 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pt-BR.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pt-BR.xlf @@ -512,10 +512,10 @@ Detalhes - - Duration <strong>{0}</strong> - Duração <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ Links - - Resource <strong>{0}</strong> - Recurso <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Recurso + + Resource + Resource + + Span Intervalo @@ -552,10 +552,10 @@ Intervalo - - Start time <strong>{0}</strong> - Horário de início <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ Entrada de log - - Resource <strong>{0}</strong> - Recurso <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Recurso - - Timestamp <strong>{0}</strong> - Carimbo de data <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ru.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ru.xlf index fce8cdd22ce..18f2b8d0ed8 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ru.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ru.xlf @@ -512,10 +512,10 @@ Сведения - - Duration <strong>{0}</strong> - Длительность: <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ Ссылки - - Resource <strong>{0}</strong> - Ресурс <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Ресурс + + Resource + Resource + + Span Диапазон @@ -552,10 +552,10 @@ Диапазон - - Start time <strong>{0}</strong> - <strong>Время начала: </strong> {0} - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ Запись журнала - - Resource <strong>{0}</strong> - Ресурс <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Ресурс - - Timestamp <strong>{0}</strong> - Метка времени <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.tr.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.tr.xlf index 6b220adba94..e2f5fd67dc1 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.tr.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.tr.xlf @@ -512,10 +512,10 @@ Ayrıntılar - - Duration <strong>{0}</strong> - Süre <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ Bağlantılar - - Resource <strong>{0}</strong> - Kaynak <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Kaynak + + Resource + Resource + + Span Yayılma @@ -552,10 +552,10 @@ Yayılma - - Start time <strong>{0}</strong> - Başlangıç zamanı <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ Günlük girişi - - Resource <strong>{0}</strong> - Kaynak <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource Kaynak - - Timestamp <strong>{0}</strong> - Zaman damgası <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hans.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hans.xlf index 26e26e9b5b7..38b62ab6f22 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hans.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hans.xlf @@ -512,10 +512,10 @@ 详细信息 - - Duration <strong>{0}</strong> - 持续时间 <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ 链接 - - Resource <strong>{0}</strong> - 资源 <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource 资源 + + Resource + Resource + + Span 范围 @@ -552,10 +552,10 @@ 范围 - - Start time <strong>{0}</strong> - 开始时间 <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ 日志条目 - - Resource <strong>{0}</strong> - 资源 <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource 资源 - - Timestamp <strong>{0}</strong> - 时间戳 <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hant.xlf b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hant.xlf index e9c8854cfda..53404b1815c 100644 --- a/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hant.xlf +++ b/src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hant.xlf @@ -512,10 +512,10 @@ 詳細資料 - - Duration <strong>{0}</strong> - 期間 <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Duration + Duration + Events @@ -527,16 +527,16 @@ 連結 - - Resource <strong>{0}</strong> - 資源 <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource 資源 + + Resource + Resource + + Span 跨度 @@ -552,10 +552,10 @@ 跨度 - - Start time <strong>{0}</strong> - 開始時間 <strong>{0}</strong> - {0} is a duration. This is raw markup, so <strong> and </strong> should not be modified + + Start time + Start time + Cloud @@ -607,20 +607,20 @@ 記錄項目 - - Resource <strong>{0}</strong> - 資源 <strong>{0}</strong> - {0} is the application name. This is raw markup, so <strong> and </strong> should not be modified - Resource 資源 - - Timestamp <strong>{0}</strong> - 時間戳記 <strong>{0}</strong> - {0} is a date. This is raw markup, so <strong> and </strong> should not be modified + + Resource + Resource + + + + Timestamp + Timestamp + Time offset diff --git a/src/Aspire.Dashboard/wwwroot/framework/blazor.web.js b/src/Aspire.Dashboard/wwwroot/framework/10/blazor.web.js similarity index 100% rename from src/Aspire.Dashboard/wwwroot/framework/blazor.web.js rename to src/Aspire.Dashboard/wwwroot/framework/10/blazor.web.js diff --git a/src/Aspire.Dashboard/wwwroot/framework/11/blazor.web.js b/src/Aspire.Dashboard/wwwroot/framework/11/blazor.web.js new file mode 100644 index 00000000000..f162a425704 --- /dev/null +++ b/src/Aspire.Dashboard/wwwroot/framework/11/blazor.web.js @@ -0,0 +1 @@ +!function(){"use strict";var e;let t;var n,r;!function(e){const t=[],n="__jsObjectId",r="__dotNetObject",o="__internalId",i="__byte[]",s="__dotNetStream",a="__jsStreamReferenceLength";let c,l,h;class d{constructor(e){this._jsObject=e,this._cachedHandlers=new Map}resolveInvocationHandler(e,t){var n;const r=null===(n=this._cachedHandlers.get(e))||void 0===n?void 0:n[t];if(r)return r;const[o,i]=I(this._jsObject,e),s=function(e,t,n,r){switch(n){case h.FunctionCall:const n=e[t];if(n instanceof Function)return n.bind(e);throw new Error(`The value '${r}' is not a function.`);case h.ConstructorCall:const o=e[t];if(o instanceof Function){const t=o.bind(e);return(...e)=>new t(...e)}throw new Error(`The value '${r}' is not a function.`);case h.GetValue:if(!function(e,t){if(!(t in e))return!1;for(;void 0!==e;){const n=Object.getOwnPropertyDescriptor(e,t);if(n)return!!n.hasOwnProperty("value")||n.hasOwnProperty("get")&&"function"==typeof n.get;e=Object.getPrototypeOf(e)}return!1}(e,t))throw new Error(`The property '${r}' is not defined or is not readable.`);return()=>e[t];case h.SetValue:if(!function(e,t){if(!(t in e))return Object.isExtensible(e);for(;void 0!==e;){const n=Object.getOwnPropertyDescriptor(e,t);if(n)return!(!n.hasOwnProperty("value")||!n.writable)||n.hasOwnProperty("set")&&"function"==typeof n.set;e=Object.getPrototypeOf(e)}return!1}(e,t))throw new Error(`The property '${r}' is not writable.`);return(...n)=>e[t]=n[0]}}(o,i,t,e);return this.addHandlerToCache(e,s,t),s}getWrappedObject(){return this._jsObject}addHandlerToCache(e,t,n){const r=this._cachedHandlers.get(e);r?r[n]=t:this._cachedHandlers.set(e,{[n]:t})}}!function(e){e[e.FunctionCall=1]="FunctionCall",e[e.ConstructorCall=2]="ConstructorCall",e[e.GetValue=3]="GetValue",e[e.SetValue=4]="SetValue"}(h=e.JSCallType||(e.JSCallType={}));const u=0,p={[u]:new d(window)};p[0]._cachedHandlers.set("import",{[h.FunctionCall]:e=>("string"==typeof e&&e.startsWith("./")&&(e=new URL(e.substring(2),document.baseURI).toString()),import(e))});let f,g=1;function m(e){t.push(e)}function y(e){if(null==e)return{[n]:-1};if(e&&("object"==typeof e||e instanceof Function)){p[g]=new d(e);const t={[n]:g};return g++,t}throw new Error(`Cannot create a JSObjectReference from the value '${e}'.`)}function v(e){let t=-1;if(e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Blob)t=e.size;else{if(!(e.buffer instanceof ArrayBuffer))throw new Error("Supplied value is not a typed array or blob.");if(void 0===e.byteLength)throw new Error(`Cannot create a JSStreamReference from the value '${e}' as it doesn't have a byteLength.`);t=e.byteLength}const r={[a]:t};try{const t=y(e);r[n]=t[n]}catch(t){throw new Error(`Cannot create a JSStreamReference from the value '${e}'.`)}return r}function b(e,n){l=e;const r=n?JSON.parse(n,(e,n)=>t.reduce((t,n)=>n(e,t),n)):null;return l=void 0,r}function w(){if(void 0===c)throw new Error("No call dispatcher has been set.");if(null===c)throw new Error("There are multiple .NET runtimes present, so a default dispatcher could not be resolved. Use DotNetObject to invoke .NET instance methods.");return c}e.attachDispatcher=function(e){const t=new _(e);return void 0===c?c=t:c&&(c=null),t},e.attachReviver=m,e.invokeMethod=function(e,t,...n){return w().invokeDotNetStaticMethod(e,t,...n)},e.invokeMethodAsync=function(e,t,...n){return w().invokeDotNetStaticMethodAsync(e,t,...n)},e.createJSObjectReference=y,e.createJSStreamReference=v,e.disposeJSObjectReference=function(e){const t=e&&e[n];"number"==typeof t&&-1!==t&&E(t)},function(e){e[e.Default=0]="Default",e[e.JSObjectReference=1]="JSObjectReference",e[e.JSStreamReference=2]="JSStreamReference",e[e.JSVoidResult=3]="JSVoidResult"}(f=e.JSCallResultType||(e.JSCallResultType={}));class _{constructor(e){this._dotNetCallDispatcher=e,this._byteArraysToBeRevived=new Map,this._pendingDotNetToJSStreams=new Map,this._pendingAsyncCalls={},this._nextAsyncCallId=1}getDotNetCallDispatcher(){return this._dotNetCallDispatcher}invokeJSFromDotNet(e,t,n,r,o){const i=A(this.processJSCall(r,e,o,t),n);return null==i?null:N(this,i)}async beginInvokeJSFromDotNet(e,t,n,r,o,i){try{const s=this.processJSCall(o,t,i,n);if(e){const t=N(this,[e,!0,A(await s,r)]);this._dotNetCallDispatcher.endInvokeJSFromDotNet(e,!0,t)}}catch(t){if(e){const n=JSON.stringify([e,!1,C(t)]);this._dotNetCallDispatcher.endInvokeJSFromDotNet(e,!1,n)}}}processJSCall(e,t,n,r){var o;const i=null!==(o=b(this,r))&&void 0!==o?o:[];return S(t,e,n)(...i)}endInvokeDotNetFromJS(e,t,n){const r=t?b(this,n):new Error(n);this.completePendingCall(parseInt(e,10),t,r)}invokeDotNetStaticMethod(e,t,...n){return this.invokeDotNetMethod(e,t,null,n)}invokeDotNetStaticMethodAsync(e,t,...n){return this.invokeDotNetMethodAsync(e,t,null,n)}invokeDotNetMethod(e,t,n,r){if(this._dotNetCallDispatcher.invokeDotNetFromJS){const o=N(this,r),i=this._dotNetCallDispatcher.invokeDotNetFromJS(e,t,n,o);return i?b(this,i):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeDotNetMethodAsync instead.")}invokeDotNetMethodAsync(e,t,n,r){if(e&&n)throw new Error(`For instance method calls, assemblyName should be null. Received '${e}'.`);const o=this._nextAsyncCallId++,i=new Promise((e,t)=>{this._pendingAsyncCalls[o]={resolve:e,reject:t}});try{const i=N(this,r);this._dotNetCallDispatcher.beginInvokeDotNetFromJS(o,e,t,n,i)}catch(e){this.completePendingCall(o,!1,e)}return i}receiveByteArray(e,t){this._byteArraysToBeRevived.set(e,t)}processByteArray(e){const t=this._byteArraysToBeRevived.get(e);return t?(this._byteArraysToBeRevived.delete(e),t):null}supplyDotNetStream(e,t){if(this._pendingDotNetToJSStreams.has(e)){const n=this._pendingDotNetToJSStreams.get(e);this._pendingDotNetToJSStreams.delete(e),n.resolve(t)}else{const n=new T;n.resolve(t),this._pendingDotNetToJSStreams.set(e,n)}}getDotNetStreamPromise(e){let t;if(this._pendingDotNetToJSStreams.has(e))t=this._pendingDotNetToJSStreams.get(e).streamPromise,this._pendingDotNetToJSStreams.delete(e);else{const n=new T;this._pendingDotNetToJSStreams.set(e,n),t=n.streamPromise}return t}completePendingCall(e,t,n){if(!this._pendingAsyncCalls.hasOwnProperty(e))throw new Error(`There is no pending async call with ID ${e}.`);const r=this._pendingAsyncCalls[e];delete this._pendingAsyncCalls[e],t?r.resolve(n):r.reject(n)}}function C(e){return e instanceof Error?`${e.message}\n${e.stack}`:e?e.toString():"null"}function S(e,t,n){const r=p[t];if(r)return r.resolveInvocationHandler(e,null!=n?n:h.FunctionCall);throw new Error(`JS object instance with ID ${t} does not exist (has it been disposed?).`)}function E(e){delete p[e]}function I(e,t){const n=t.split(".");let r=e;for(let e=0;econsole.error(e))}serializeAsArg(){return{[r]:this._id}}}e.DotNetObject=k,m(function(e,t){if(t&&"object"==typeof t){if(t.hasOwnProperty(r))return new k(t[r],l);if(t.hasOwnProperty(n)){const e=t[n],r=p[e];if(r)return r.getWrappedObject();throw new Error(`JS object instance with Id '${e}' does not exist. It may have been disposed.`)}if(t.hasOwnProperty(i)){const e=t[i],n=l.processByteArray(e);if(void 0===n)throw new Error(`Byte array index '${e}' does not exist.`);return n}if(t.hasOwnProperty(s)){const e=t[s],n=l.getDotNetStreamPromise(e);return new R(n)}}return t});class R{constructor(e){this._streamPromise=e}stream(){return this._streamPromise}async arrayBuffer(){return new Response(await this.stream()).arrayBuffer()}}class T{constructor(){this.streamPromise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}function A(e,t){switch(t){case f.Default:return e;case f.JSObjectReference:return y(e);case f.JSStreamReference:return v(e);case f.JSVoidResult:return null;default:throw new Error(`Invalid JS call result type '${t}'.`)}}let D=0;function N(e,t){D=0,l=e;const n=JSON.stringify(t,M);return l=void 0,n}function x(e){for(let t=0;ti.set(e,t))}function d(e){const t=[];for(let n=0;ne.selected).map(e=>e.value)}}{const e=function(e){return!!e&&"INPUT"===e.tagName&&"checkbox"===e.getAttribute("type")}(t);return{value:e?!!t.checked:t.value}}}}),h(["copy","cut","paste"],{createEventArgs:e=>({type:e.type})}),h(["drag","dragend","dragenter","dragleave","dragover","dragstart","drop"],{createEventArgs:e=>{return{...u(t=e),dataTransfer:t.dataTransfer?{dropEffect:t.dataTransfer.dropEffect,effectAllowed:t.dataTransfer.effectAllowed,files:Array.from(t.dataTransfer.files).map(e=>e.name),items:Array.from(t.dataTransfer.items).map(e=>({kind:e.kind,type:e.type})),types:t.dataTransfer.types}:null};var t}}),h(["focus","blur","focusin","focusout"],{createEventArgs:e=>({type:e.type})}),h(["keydown","keyup","keypress"],{createEventArgs:e=>{return{key:(t=e).key,code:t.code,location:t.location,repeat:t.repeat,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,type:t.type,isComposing:t.isComposing};var t}}),h(["contextmenu","click","mouseover","mouseout","mousemove","mousedown","mouseup","mouseleave","mouseenter","dblclick"],{createEventArgs:e=>u(e)}),h(["error"],{createEventArgs:e=>{return{message:(t=e).message,filename:t.filename,lineno:t.lineno,colno:t.colno,type:t.type};var t}}),h(["loadstart","timeout","abort","load","loadend","progress"],{createEventArgs:e=>{return{lengthComputable:(t=e).lengthComputable,loaded:t.loaded,total:t.total,type:t.type};var t}}),h(["touchcancel","touchend","touchmove","touchenter","touchleave","touchstart"],{createEventArgs:e=>{return{detail:(t=e).detail,touches:d(t.touches),targetTouches:d(t.targetTouches),changedTouches:d(t.changedTouches),ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,type:t.type};var t}}),h(["gotpointercapture","lostpointercapture","pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"],{createEventArgs:e=>{return{...u(t=e),pointerId:t.pointerId,width:t.width,height:t.height,pressure:t.pressure,tiltX:t.tiltX,tiltY:t.tiltY,pointerType:t.pointerType,isPrimary:t.isPrimary};var t}}),h(["wheel","mousewheel"],{createEventArgs:e=>{return{...u(t=e),deltaX:t.deltaX,deltaY:t.deltaY,deltaZ:t.deltaZ,deltaMode:t.deltaMode};var t}}),h(["cancel","close","toggle"],{createEventArgs:()=>({})});const p=["date","datetime-local","month","time","week"],f=new Map;let g,m,y,v=0,b=!1;const w={async add(e,t,n){if(!n)throw new Error("initialParameters must be an object, even if empty.");const r="__bl-dynamic-root:"+(++v).toString();f.set(r,e);const o=await E().invokeMethodAsync("AddRootComponent",t,r),i=new S(o,y[t]);return await i.setParameters(n),i}};function _(e){const t=f.get(e);if(t)return f.delete(e),t}class C{invoke(e){return this._callback(e)}setCallback(t){this._selfJSObjectReference||(this._selfJSObjectReference=e.createJSObjectReference(this)),this._callback=t}getJSObjectReference(){return this._selfJSObjectReference}dispose(){this._selfJSObjectReference&&e.disposeJSObjectReference(this._selfJSObjectReference)}}class S{constructor(e,t){this._jsEventCallbackWrappers=new Map,this._componentId=e;for(const e of t)"eventcallback"===e.type&&this._jsEventCallbackWrappers.set(e.name.toLowerCase(),new C)}setParameters(e){const t={},n=Object.entries(e||{}),r=n.length;for(const[e,r]of n){const n=this._jsEventCallbackWrappers.get(e.toLowerCase());n&&r?(n.setCallback(r),t[e]=n.getJSObjectReference()):t[e]=r}return E().invokeMethodAsync("SetRootComponentParameters",this._componentId,r,t)}async dispose(){if(null!==this._componentId){await E().invokeMethodAsync("RemoveRootComponent",this._componentId),this._componentId=null;for(const e of this._jsEventCallbackWrappers.values())e.dispose()}}}function E(){if(!g)throw new Error("Dynamic root components have not been enabled in this application.");return g}const I=new Map,k=[],R=new Map;function T(t,n,r,o){if(I.has(t))throw new Error(`Interop methods are already registered for renderer ${t}`);I.set(t,n),r&&o&&Object.keys(r).length>0&&function(t,n,r,o){if(g&&m!==t)throw new Error("Dynamic root components have already been enabled.");if(m=t,g=n,y=r,!b){for(const[t,n]of Object.entries(o)){const o=e.findJSFunction(t,0);for(const e of n)o(e,r[e])}b=!0}}(t,N(t),r,o),R.get(t)?.[0]?.(),function(e){for(const t of k)t(e)}(t)}function A(e){return I.has(e)}function D(e,t,n){return x(e,t.eventHandlerId,()=>N(e).invokeMethodAsync("DispatchEventAsync",t,n))}function N(e){const t=I.get(e);if(!t)throw new Error(`No interop methods are registered for renderer ${e}`);return t}let x=(e,t,n)=>n();function M(e){const t=x;x=(n,r,o)=>{e(n,r,()=>t(n,r,o))}}const P=$(["abort","blur","cancel","canplay","canplaythrough","change","close","cuechange","durationchange","emptied","ended","error","focus","load","loadeddata","loadedmetadata","loadend","loadstart","mouseenter","mouseleave","pointerenter","pointerleave","pause","play","playing","progress","ratechange","reset","scroll","seeked","seeking","stalled","submit","suspend","timeupdate","toggle","unload","volumechange","waiting","DOMNodeInsertedIntoDocument","DOMNodeRemovedFromDocument"]),L={submit:!0},U=$(["click","dblclick","mousedown","mousemove","mouseup"]);class B{static{this.nextEventDelegatorId=0}constructor(e){this.browserRendererId=e,this.afterClickCallbacks=[];const t=++B.nextEventDelegatorId;this.eventsCollectionKey=`_blazorEvents_${t}`,this.eventInfoStore=new O(this.onGlobalEvent.bind(this))}setListener(e,t,n,r){const o=this.getEventHandlerInfosForElement(e,!0),i=o.getHandler(t);if(i)this.eventInfoStore.update(i.eventHandlerId,n);else{const i={element:e,eventName:t,eventHandlerId:n,renderingComponentId:r};this.eventInfoStore.add(i),o.setHandler(t,i)}}getHandler(e){return this.eventInfoStore.get(e)}removeListener(e){const t=this.eventInfoStore.remove(e);if(t){const e=t.element,n=this.getEventHandlerInfosForElement(e,!1);n&&n.removeHandler(t.eventName)}}removeListenersForElement(e){const t=this.getEventHandlerInfosForElement(e,!1);if(t){for(const e of t.enumerateHandlers())this.eventInfoStore.remove(e.eventHandlerId);delete e[this.eventsCollectionKey]}}notifyAfterClick(e){this.afterClickCallbacks.push(e),this.eventInfoStore.addGlobalListener("click")}setStopPropagation(e,t,n){const r=this.getEventHandlerInfosForElement(e,!0),o=r.stopPropagation(t);r.stopPropagation(t,n),!o&&n?this.eventInfoStore.addGlobalListener(t):o&&!n&&this.eventInfoStore.decrementCountByEventName(t)}setPreventDefault(e,t,n){const r=this.getEventHandlerInfosForElement(e,!0),o=r.preventDefault(t);r.preventDefault(t,n),!o&&n?this.eventInfoStore.addActiveGlobalListener(t):o&&!n&&this.eventInfoStore.decrementCountByEventName(t)}onGlobalEvent(e){if(!(e.target instanceof Element))return;if(!A(this.browserRendererId))return;this.dispatchGlobalEventToAllElements(e.type,e);const t=(n=e.type,s.get(n));var n;t&&t.forEach(t=>this.dispatchGlobalEventToAllElements(t,e)),"click"===e.type&&this.afterClickCallbacks.forEach(t=>t(e))}dispatchGlobalEventToAllElements(e,t){const n=t.composedPath();let r=n.shift(),i=null,s=!1;const a=Object.prototype.hasOwnProperty.call(P,e);let l=!1;for(;r;){const h=r,d=this.getEventHandlerInfosForElement(h,!1);if(d){const n=d.getHandler(e);if(n&&!H(h,t.type)){if(!s){const n=c(e);i=n?.createEventArgs?n.createEventArgs(t):{},s=!0}Object.prototype.hasOwnProperty.call(L,t.type)&&t.preventDefault(),D(this.browserRendererId,{eventHandlerId:n.eventHandlerId,eventName:e,eventFieldInfo:o.fromEvent(n.renderingComponentId,t)},i)}d.stopPropagation(e)&&(l=!0),d.preventDefault(e)&&t.preventDefault()}r=a||l?void 0:n.shift()}}getEventHandlerInfosForElement(e,t){return Object.prototype.hasOwnProperty.call(e,this.eventsCollectionKey)?e[this.eventsCollectionKey]:t?e[this.eventsCollectionKey]=new F:null}}class O{constructor(e){this.globalListener=e,this.infosByEventHandlerId={},this.countByEventName={},a.push(this.handleEventNameAliasAdded.bind(this))}add(e){if(this.infosByEventHandlerId[e.eventHandlerId])throw new Error(`Event ${e.eventHandlerId} is already tracked`);this.infosByEventHandlerId[e.eventHandlerId]=e,this.addGlobalListener(e.eventName)}get(e){return this.infosByEventHandlerId[e]}addGlobalListener(e){if(e=l(e),Object.prototype.hasOwnProperty.call(this.countByEventName,e))this.countByEventName[e]++;else{this.countByEventName[e]=1;const t=Object.prototype.hasOwnProperty.call(P,e);document.addEventListener(e,this.globalListener,t)}}addActiveGlobalListener(e){e=l(e),Object.prototype.hasOwnProperty.call(this.countByEventName,e)?(this.countByEventName[e]++,document.removeEventListener(e,this.globalListener)):this.countByEventName[e]=1;const t=Object.prototype.hasOwnProperty.call(P,e);document.addEventListener(e,this.globalListener,{capture:t,passive:!1})}update(e,t){if(Object.prototype.hasOwnProperty.call(this.infosByEventHandlerId,t))throw new Error(`Event ${t} is already tracked`);const n=this.infosByEventHandlerId[e];delete this.infosByEventHandlerId[e],n.eventHandlerId=t,this.infosByEventHandlerId[t]=n}remove(e){const t=this.infosByEventHandlerId[e];if(t){delete this.infosByEventHandlerId[e];const n=l(t.eventName);this.decrementCountByEventName(n)}return t}decrementCountByEventName(e){0===--this.countByEventName[e]&&(delete this.countByEventName[e],document.removeEventListener(e,this.globalListener))}handleEventNameAliasAdded(e,t){if(Object.prototype.hasOwnProperty.call(this.countByEventName,e)){const n=this.countByEventName[e];delete this.countByEventName[e],document.removeEventListener(e,this.globalListener),this.addGlobalListener(t),this.countByEventName[t]+=n-1}}}class F{constructor(){this.handlers={},this.preventDefaultFlags=null,this.stopPropagationFlags=null}*enumerateHandlers(){for(const e in this.handlers)Object.prototype.hasOwnProperty.call(this.handlers,e)&&(yield this.handlers[e])}getHandler(e){return Object.prototype.hasOwnProperty.call(this.handlers,e)?this.handlers[e]:null}setHandler(e,t){this.handlers[e]=t}removeHandler(e){delete this.handlers[e]}preventDefault(e,t){return void 0!==t&&(this.preventDefaultFlags=this.preventDefaultFlags||{},this.preventDefaultFlags[e]=t),!!this.preventDefaultFlags&&this.preventDefaultFlags[e]}stopPropagation(e,t){return void 0!==t&&(this.stopPropagationFlags=this.stopPropagationFlags||{},this.stopPropagationFlags[e]=t),!!this.stopPropagationFlags&&this.stopPropagationFlags[e]}}function $(e){const t={};return e.forEach(e=>{t[e]=!0}),t}function H(e,t){return(e instanceof HTMLButtonElement||e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement)&&Object.prototype.hasOwnProperty.call(U,t)&&e.disabled}function j(e,t){switch(t){case"webassembly":return G(e,"webassembly");case"server":return function(e){return G(e,"server").sort((e,t)=>e.sequence-t.sequence)}(e);case"auto":return G(e,"auto")}}const W=/^\s*Blazor-Server-Component-State:(?[a-zA-Z0-9+/=]+)$/,z=/^\s*Blazor-WebAssembly-Component-State:(?[a-zA-Z0-9+/=]+)$/,q=/^\s*Blazor-Web-Initializers:(?[a-zA-Z0-9+/=]+)$/,J=/^\s*Blazor-WebAssembly:[^{]*(?.*)$/;function V(e){return X(e,W)}function K(e){return X(e,z)}function X(e,t,n="state"){if(e.nodeType===Node.COMMENT_NODE){const r=e.textContent||"",o=t.exec(r),i=o&&o.groups&&o.groups[n];return i&&e.parentNode?.removeChild(e),i}if(!e.hasChildNodes())return;const r=e.childNodes;for(let e=0;e.*)$/);function Q(e,t){const n=e.currentElement;var r,o,i;if(n&&n.nodeType===Node.COMMENT_NODE&&n.textContent){const s=Y.exec(n.textContent),a=s&&s.groups&&s.groups.descriptor;if(!a)return;!function(e){if(e.parentNode instanceof Document)throw new Error("Root components cannot be marked as interactive. The element must be rendered statically so that scripts are not evaluated multiple times.")}(n);try{const s=function(e){const t=JSON.parse(e),{type:n}=t;if("server"!==n&&"webassembly"!==n&&"auto"!==n)throw new Error(`Invalid component type '${n}'.`);return t}(a),c=function(e,t,n){const{prerenderId:r}=e;if(r){for(;n.next()&&n.currentElement;){const e=n.currentElement;if(e.nodeType!==Node.COMMENT_NODE)continue;if(!e.textContent)continue;const t=Y.exec(e.textContent),o=t&&t[1];if(o)return ne(o,r),e}throw new Error(`Could not find an end component comment for '${t}'.`)}}(s,n,e);if(t!==s.type)return;switch(s.type){case"webassembly":return o=n,i=c,te(r=s),{...r,uniqueId:Z++,start:o,end:i};case"server":return function(e,t,n){return ee(e),{...e,uniqueId:Z++,start:t,end:n}}(s,n,c);case"auto":return function(e,t,n){return ee(e),te(e),{...e,uniqueId:Z++,start:t,end:n}}(s,n,c)}}catch(e){throw new Error(`Found malformed component comment at ${n.textContent}`)}}}let Z=0;function ee(e){const{descriptor:t,sequence:n}=e;if(!t)throw new Error("descriptor must be defined when using a descriptor.");if(void 0===n)throw new Error("sequence must be defined when using a descriptor.");if(!Number.isInteger(n))throw new Error(`Error parsing the sequence '${n}' for component '${JSON.stringify(e)}'`)}function te(e){const{assembly:t,typeName:n}=e;if(!t)throw new Error("assembly must be defined when using a descriptor.");if(!n)throw new Error("typeName must be defined when using a descriptor.");e.parameterDefinitions=e.parameterDefinitions&&atob(e.parameterDefinitions),e.parameterValues=e.parameterValues&&atob(e.parameterValues)}function ne(e,t){const n=JSON.parse(e);if(1!==Object.keys(n).length)throw new Error(`Invalid end of component comment: '${e}'`);const r=n.prerenderId;if(!r)throw new Error(`End of component comment must have a value for the prerendered property: '${e}'`);if(r!==t)throw new Error(`End of component comment prerendered property must match the start comment prerender id: '${t}', '${r}'`)}class re{constructor(e){this.childNodes=e,this.currentIndex=-1,this.length=e.length}next(){return this.currentIndex++,this.currentIndex0){if(!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");e.childNodes.forEach(t=>{if(function(e){if(e.nodeType!==Node.COMMENT_NODE)return!1;const t=e.textContent||"";return t.trim().startsWith("Blazor-Server-Component-State:")||t.trim().startsWith("Blazor-WebAssembly-Component-State:")||t.trim().startsWith("Blazor-Web-Initializers:")||t.trim().startsWith("Blazor-WebAssembly:")}(t))return;const r=he(t,!0);r[ae]=e,n.push(r)})}return e[se]=n,e}function de(e){const t=we(e);for(;t.length;)fe(e,0)}function ue(e,t){const n=document.createComment("!");return pe(n,e,t),n}function pe(e,t,n){const r=e;let o=e;if(e instanceof Comment){const t=we(r);if(t?.length>0){const t=Re(r),n=new Range;n.setStartBefore(e),n.setEndAfter(t),o=n.extractContents()}}const i=ge(r);if(i){const e=we(i),t=Array.prototype.indexOf.call(e,r);e.splice(t,1),delete r[ae]}const s=we(t);if(n0;)fe(n,0)}const r=n;r.parentNode.removeChild(r)}function ge(e){return e[ae]||null}function me(e,t){return we(e)[t]}function ye(e){return e[ce]||null}function ve(e){const t=Ie(e);return"http://www.w3.org/2000/svg"===t.namespaceURI&&"foreignObject"!==t.tagName}function be(e){return"http://www.w3.org/1998/Math/MathML"===Ie(e).namespaceURI}function we(e){return e[se]}function _e(e){const t=we(ge(e));return t[Array.prototype.indexOf.call(t,e)+1]||null}function Ce(e){return se in e}function*Se(e){const t=we(e);for(const e of t)yield*Se(e);yield e}function Ee(e,t){const n=we(e);t.forEach(e=>{e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=Re(e.moveRangeStart)}),t.forEach(t=>{const r=document.createComment("marker");t.moveToBeforeMarker=r;const o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):ke(r,e)}),t.forEach(e=>{const t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd;let i=r;for(;i;){const e=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=e}n.removeChild(t)}),t.forEach(e=>{n[e.toSiblingIndex]=e.moveRangeStart})}function Ie(e){if(e instanceof Element||e instanceof DocumentFragment)return e;if(e instanceof Comment)return e.parentNode;throw new Error("Not a valid logical element")}function ke(e,t){if(t instanceof Element||t instanceof DocumentFragment)t.appendChild(e);else{if(!(t instanceof Comment))throw new Error(`Cannot append node because the parent is not a valid logical element. Parent: ${t}`);{const n=_e(t);n?n.parentNode.insertBefore(e,n):ke(e,ge(t))}}}function Re(e){if(e instanceof Element||e instanceof DocumentFragment)return e;const t=_e(e);if(t)return t.previousSibling;{const t=ge(e);return t instanceof Element||t instanceof DocumentFragment?t.lastChild:Re(t)}}function Te(e){return`_bl_${e}`}const Ae="__internalId";e.attachReviver((e,t)=>t&&"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,Ae)&&"string"==typeof t[Ae]?function(e){const t=`[${Te(e)}]`;return document.querySelector(t)}(t[Ae]):t);const De="_blazorDeferredValue";function Ne(e){e instanceof HTMLOptionElement?Le(e):De in e&&Pe(e,e[De])}function xe(e){return"select-multiple"===e.type}function Me(e,t){e.value=t||""}function Pe(e,t){e instanceof HTMLSelectElement?xe(e)?function(e,t){t||=[];for(let n=0;n{mt()&&at(e,e=>{kt(e,!0,!1)})})}getRootComponentCount(){return this.rootComponentIds.size}attachRootComponentToLogicalElement(e,t,n){if(ze(t))throw new Error(`Root component '${e}' could not be attached because its target element is already associated with a root component`);n&&(t=ue(t,we(t).length)),We(t,!0),this.attachComponentToElement(e,t),this.rootComponentIds.add(e),Fe.add(t)}updateComponent(e,t,n,r){const o=this.childComponentLocations[t];if(!o)throw new Error(`No element is currently associated with component ${t}`);Fe.delete(o)&&(this.detachEventHandlersFromElement(o),de(o),o instanceof Comment&&(o.textContent="!"));const i=Ie(o)?.getRootNode(),s=i&&i.activeElement;this.applyEdits(e,t,o,0,n,r),s instanceof HTMLElement&&i&&i.activeElement!==s&&s.focus()}disposeComponent(e){if(this.rootComponentIds.delete(e)){const t=this.childComponentLocations[e];We(t,!1),!0===t[He]?Fe.add(t):de(t)}delete this.childComponentLocations[e]}disposeEventHandler(e){this.eventDelegator.removeListener(e)}attachComponentToElement(e,t){this.childComponentLocations[e]=t}detachEventHandlersFromElement(e){for(const t of Se(e))t instanceof Element&&this.eventDelegator.removeListenersForElement(t)}applyEdits(e,t,r,o,i,s){let a,c=0,l=o;const h=e.arrayBuilderSegmentReader,d=e.editReader,u=e.frameReader,p=h.values(i),f=h.offset(i),g=f+h.count(i);for(let i=f;i{const t=document.createElement("script");t.textContent=e.textContent,e.getAttributeNames().forEach(n=>{t.setAttribute(n,e.getAttribute(n))}),e.parentNode.replaceChild(t,e)}),Ue.content));var s,a,c;let l=0;for(;i.firstChild;)pe(i.firstChild,o,l++)}applyAttribute(e,t,n,r){const o=e.frameReader,i=o.attributeName(r),s=o.attributeEventHandlerId(r);if(s){const e=Ke(i);return void this.eventDelegator.setListener(n,e,s,t)}const a=o.attributeValue(r);this.setOrRemoveAttributeOrProperty(n,i,a)}insertFrameRange(e,t,n,r,o,i,s){const a=r;for(let a=i;a{Nt(t,e)})},enableNavigationInterception:function(e){if(void 0!==Ye&&Ye!==e)throw new Error("Only one interactive runtime may enable navigation interception at a time.");Ye=e},setHasLocationChangingListeners:function(e,t){const n=_t.get(e);if(!n)throw new Error(`Renderer with ID '${e}' is not listening for navigation events`);n.hasLocationChangingEventListeners=t},endLocationChanging:function(e,t){St&&e===wt&&(St(t),St=null)},navigateTo:function(e,t){It(e,t,!0)},refresh:function(e){!e&&pt()?ft(location.href,!0):location.reload()},getBaseURI:()=>document.baseURI,getLocationHref:()=>location.href,scrollToElement:ut};function It(e,t,n=!1){const r=gt(e),o=Pt();if(t.forceLoad||!ct(r)||"serverside-fullpageload"===o)!function(e,t){if(location.href===e){const t=e+"?";history.replaceState(null,"",t),location.replace(e)}else t?location.replace(e):location.href=e}(e,t.replaceHistoryEntry);else if("clientside-router"===o)kt(r,!1,t.replaceHistoryEntry,t.historyEntryState,n);else{if("serverside-enhanced"!==o)throw new Error(`Unsupported page load mechanism: ${o}`);ft(r,t.replaceHistoryEntry)}}async function kt(e,t,n,r=void 0,o=!1){if(At(),lt(location.href,e))return Rt(e,n,r),void dt(e);const i=Mt();(o||!i?.hasLocationChangingEventListeners||await Dt(e,r,t,i))&&(ht(e,location.href)||it(Xe.AfterBatch),Rt(e,n,r),await Nt(t))}function Rt(e,t,n=void 0){t?history.replaceState({userState:n,_index:bt},"",e):(bt++,history.pushState({userState:n,_index:bt},"",e))}function Tt(e){return new Promise(t=>{const n=Ct;Ct=()=>{Ct=n,t()},history.go(e)})}function At(){St&&(St(!1),St=null)}function Dt(e,t,n,r){return new Promise(o=>{At(),wt++,St=o,r.locationChanging(wt,e,t,n)})}async function Nt(e,t){const n=t??location.href;await Promise.all(Array.from(_t,async([t,r])=>{A(t)&&await r.locationChanged(n,history.state?.userState,e)}))}async function xt(e){Ct&&"serverside-enhanced"!==Pt()&&await Ct(e),bt=history.state?._index??0}function Mt(){const e=yt();if(void 0!==e)return _t.get(e)}function Pt(){return mt()?"clientside-router":pt()?"serverside-enhanced":window.Blazor._internal.isBlazorWeb?"serverside-fullpageload":"clientside-router"}const Lt={focus:function(e,t){if(e instanceof HTMLElement)e.focus({preventScroll:t});else{if(!(e instanceof SVGElement))throw new Error("Unable to focus an invalid element.");if(!e.hasAttribute("tabindex"))throw new Error("Unable to focus an SVG element that does not have a tabindex.");e.focus({preventScroll:t})}},focusBySelector:function(e){const t=document.querySelector(e);t&&(t.hasAttribute("tabindex")||(t.tabIndex=-1),t.focus({preventScroll:!0}))}},Ut={init:function(e,t,n,r=50){if(!(t&&n&&t.isConnected&&n.isConnected))return;const o=Ft(t),i=o||document.documentElement,s=null!==(h=n.parentElement)&&(h instanceof HTMLTableElement&&""===h.style.display||"table"===h.style.display||h instanceof HTMLTableSectionElement&&""===h.style.display||"table-row-group"===h.style.display),a=CSS.supports("overflow-anchor","auto"),c=!s&&a,l=document.createRange();var h;s&&(t.style.display="table-row",n.style.display="table-row"),c?(t.style.overflowAnchor="none",n.style.overflowAnchor="none"):i.style.overflowAnchor="none";const d=new IntersectionObserver(function(e){e.forEach(e=>T.set(e.target,e)),A||(D(),A=setTimeout(()=>{A=null,D()},Ot))},{root:o,rootMargin:`${r}px`});d.observe(t),d.observe(n);let u=!1,p=new Set;const f=new Map;let g=!1;function m(e){return e.borderBoxSize?.[0]?.blockSize??e.contentRect.height}const y=new ResizeObserver(e=>{for(const r of e)if(r.target===t||r.target===n){const e=r.target;e.isConnected&&(d.unobserve(e),d.observe(e))}w||_?(i.scrollTop=w?i.scrollHeight:0,0===(w?n:t).offsetHeight&&(w=_=!1,b())):u&&b(),c||function(e){let r=0;const s=o?o.getBoundingClientRect().top:0;for(const o of e)if(o.target!==t&&o.target!==n&&o.target.isConnected){const e=o.target,t=f.get(e),n=m(o);f.set(e,n),void 0!==t&&t!==n&&e.getBoundingClientRect().top0&&(i.scrollTop+=r)}(e)});function v(){if(!u){u=!0,c&&(i.style.overflowAnchor="none");for(let e=t.nextElementSibling;e&&e!==n;e=e.nextElementSibling)y.observe(e),p.add(e)}}function b(){if(u){u=!1;for(const e of p)y.unobserve(e);p.clear(),c&&(i.style.overflowAnchor=""),f.clear()}}y.observe(t),y.observe(n);let w=!1,_=!1,C=!1,S=!1;const E=o||document;function I(e){const r=e;"End"===r.key?(C=!0,S=!1,!w&&n.offsetHeight>0&&(w=!0,v())):"Home"===r.key&&(S=!0,C=!1,!_&&t.offsetHeight>0&&(_=!0,v()))}E.addEventListener("keydown",I);const{observersByDotNetObjectId:k,id:R}=$t(e);let T=new Map,A=null;function D(){if(0===T.size)return;const r=Array.from(T.values());T.clear(),function(r){if(!t.isConnected||!n.isConnected)return;const o=r.filter(e=>e.isIntersecting?(e.target===n?0!==n.offsetHeight?w||(i.scrollTop+i.clientHeight>=i.scrollHeight-1||C)&&(w=!0,v(),C&&(i.scrollTop=i.scrollHeight,C=!1)):w&&(w=!1,b()):e.target===t&&(0!==t.offsetHeight?_||(i.scrollTop<1||S)&&(_=!0,v(),S&&(i.scrollTop=0,S=!1)):_&&(_=!1,b())),!0):(e.target===n&&w&&n.offsetHeight>0?i.scrollTop=i.scrollHeight:e.target===t&&_&&t.offsetHeight>0&&(i.scrollTop=0),!1));if(0===o.length)return;const s=function(e,t){const n=e.offsetHeight>0?e:t.offsetHeight>0?t:null;if(!n)return 1;const r=n.getBoundingClientRect().height/n.offsetHeight;return Number.isFinite(r)&&r>0?r:1}(t,n);l.setStartAfter(t),l.setEndBefore(n);const a=l.getBoundingClientRect().height/s;o.forEach(r=>{const o=(r.rootBounds?.height??0)/s;if(g=!0,r.target===t){const t=(r.intersectionRect.top-r.boundingClientRect.top)/s;e.invokeMethodAsync("OnSpacerBeforeVisible",t,a,o)}else if(r.target===n&&n.offsetHeight>0){const t=(r.boundingClientRect.bottom-r.intersectionRect.bottom)/s;e.invokeMethodAsync("OnSpacerAfterVisible",t,a,o)}})}(r)}k[R]={intersectionObserver:d,resizeObserver:y,refreshObservedElements:function(){if(s&&(t.style.display="table-row",n.style.display="table-row"),c&&(t.style.overflowAnchor="none",n.style.overflowAnchor="none"),y.observe(t),y.observe(n),u){const e=new Set;for(let r=t.nextElementSibling;r&&r!==n;r=r.nextElementSibling)y.observe(r),e.add(r);for(const t of p)e.has(t)||y.unobserve(t);return void(p=e)}if(!c&&!g){const e=new Set;for(let r=t.nextElementSibling;r&&r!==n;r=r.nextElementSibling)y.observe(r),e.add(r);for(const[t]of f)e.has(t)||(y.unobserve(t),f.delete(t))}g=!1},scrollElement:i,startConvergenceObserving:v,setConvergingToBottom:()=>{w=!0},onDispose:()=>{b(),f.clear(),y.disconnect(),E.removeEventListener("keydown",I),A&&(clearTimeout(A),A=null),T.clear()}}},dispose:function(e){const{observersByDotNetObjectId:t,id:n}=$t(e),r=t[n];r&&(r.intersectionObserver.disconnect(),r.resizeObserver?.disconnect(),r.onDispose?.(),delete t[n]),e.dispose()},scrollToBottom:function(e){const{observersByDotNetObjectId:t,id:n}=$t(e),r=t[n];r&&(r.setConvergingToBottom?.(),r.scrollElement.scrollTop=r.scrollElement.scrollHeight,r.startConvergenceObserving?.())},refreshObservers:function(e){const{observersByDotNetObjectId:t,id:n}=$t(e),r=t[n];r?.refreshObservedElements?.()}},Bt=Symbol(),Ot=50;function Ft(e){if(!e||e===document.body||e===document.documentElement)return null;const t=getComputedStyle(e);return"visible"!==t.overflowY&&"hidden"!==t.overflowY&&"clip"!==t.overflowY?e:Ft(e.parentElement)}function $t(e){const t=e._callDispatcher,n=e._id;return t[Bt]??={},{observersByDotNetObjectId:t[Bt],id:n}}const Ht={getAndRemoveExistingTitle:function(){const e=document.head?document.head.getElementsByTagName("title"):[];if(0===e.length)return null;let t=null;for(let n=e.length-1;n>=0;n--){const r=e[n],o=r.previousSibling;o instanceof Comment&&null!==ge(o)||(null===t&&(t=r.textContent),r.parentNode?.removeChild(r))}return t}},jt={init:function(e,t){t._blazorInputFileNextFileId=0,t.addEventListener("click",function(){t.value=""}),t.addEventListener("change",function(){t._blazorFilesById={};const n=Array.prototype.map.call(t.files,function(e){const n={id:++t._blazorInputFileNextFileId,lastModified:new Date(e.lastModified).toISOString(),name:e.name,size:e.size,contentType:e.type,readPromise:void 0,arrayBuffer:void 0,blob:e};return t._blazorFilesById[n.id]=n,n});e.invokeMethodAsync("NotifyChange",n)}),t.addEventListener("cancel",function(){t._blazorFilesById={},e.invokeMethodAsync("NotifyChange",[])})},toImageFile:async function(e,t,n,r,o){const i=Wt(e,t),s=await new Promise(function(e){const t=new Image;t.onload=function(){URL.revokeObjectURL(t.src),e(t)},t.onerror=function(){t.onerror=null,URL.revokeObjectURL(t.src)},t.src=URL.createObjectURL(i.blob)}),a=await new Promise(function(e){const t=Math.min(1,r/s.width),i=Math.min(1,o/s.height),a=Math.min(t,i),c=document.createElement("canvas");c.width=Math.round(s.width*a),c.height=Math.round(s.height*a),c.getContext("2d")?.drawImage(s,0,0,c.width,c.height),c.toBlob(e,n)}),c={id:++e._blazorInputFileNextFileId,lastModified:i.lastModified,name:i.name,size:a?.size||0,contentType:n,blob:a||i.blob};return e._blazorFilesById[c.id]=c,c},readFileData:async function(e,t){return Wt(e,t).blob}};function Wt(e,t){const n=e._blazorFilesById[t];if(!n)throw new Error(`There is no file with ID ${t}. The file list may have changed. See https://aka.ms/aspnet/blazor-input-file-multiple-selections.`);return n}const zt=new Set,qt={enableNavigationPrompt:function(e){0===zt.size&&window.addEventListener("beforeunload",Jt),zt.add(e)},disableNavigationPrompt:function(e){zt.delete(e),0===zt.size&&window.removeEventListener("beforeunload",Jt)}};function Jt(e){e.preventDefault(),e.returnValue=!0}async function Vt(e,t,n){return e instanceof Blob?await async function(e,t,n){const r=e.slice(t,t+n),o=await r.arrayBuffer();return new Uint8Array(o)}(e,t,n):function(e,t,n){return new Uint8Array(e.buffer,e.byteOffset+t,n)}(e,t,n)}const Kt=new Map;var Xt;!function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None"}(Xt||(Xt={})),class e{static{this.instance=new e}log(e,t){}};let Gt=class{constructor(e){this.minLevel=e}log(e,t){if(e>=this.minLevel){const n=`[${(new Date).toISOString()}] ${Xt[e]}: ${t}`;switch(e){case Xt.Critical:case Xt.Error:console.error(n);break;case Xt.Warning:console.warn(n);break;case Xt.Information:console.info(n);break;default:console.log(n)}}}};class Yt{static{this.CACHE_NAME="blazor-media-cache"}static{this.cachePromise=void 0}static{this.logger=new Gt(Xt.Warning)}static{this.loadingElements=new Set}static{this.activeCacheKey=new WeakMap}static{this.tracked=new WeakMap}static{this.observersByParent=new WeakMap}static{this.controllers=new WeakMap}static initializeParentObserver(e){if(this.observersByParent.has(e))return;const t=new MutationObserver(e=>{for(const t of e){if("childList"===t.type)for(const e of Array.from(t.removedNodes))if(e.nodeType===Node.ELEMENT_NODE){const t=e;this.tracked.has(t)&&this.revokeTrackedUrl(t),t.querySelectorAll("[src],[href]").forEach(e=>{const t=e;this.tracked.has(t)&&this.revokeTrackedUrl(t)})}if("attributes"===t.type){const e=t.attributeName;if("src"===e||"href"===e){const n=t.target,r=this.tracked.get(n);if(r&&r.attr===e){const t=n.getAttribute(e)||"";t&&t===r.url||this.revokeTrackedUrl(n)}}}}});t.observe(e,{childList:!0,attributes:!0,attributeFilter:["src","href"]}),this.observersByParent.set(e,t)}static revokeTrackedUrl(e){const t=this.tracked.get(e);if(t){try{URL.revokeObjectURL(t.url)}catch{}this.tracked.delete(e),this.loadingElements.delete(e),this.activeCacheKey.delete(e)}const n=this.controllers.get(e);if(n){try{n.abort()}catch{}this.controllers.delete(e)}}static async setContentAsync(e,t,n,r,o,i){if(!e||!r)return{success:!1,fromCache:!1,objectUrl:null,error:"Invalid parameters"};const s=e.parentElement;s&&this.initializeParentObserver(s);const a=this.activeCacheKey.get(e);if(a&&a!==r){const t=this.controllers.get(e);if(t){try{t.abort()}catch{}this.controllers.delete(e)}}this.activeCacheKey.set(e,r);try{try{const t=await this.getCache();if(t){const n=await t.match(encodeURIComponent(r));if(n){const t=await n.blob(),o=URL.createObjectURL(t);return this.setUrl(e,o,r,i),{success:!0,fromCache:!0,objectUrl:o}}}}catch(e){this.logger.log(Xt.Debug,`Cache lookup failed: ${e}`)}if(t){const s=await this.streamAndCreateUrl(e,t,n,r,o,i);if(s)return{success:!0,fromCache:!1,objectUrl:s}}return{success:!1,fromCache:!1,objectUrl:null,error:"No/empty stream provided and not in cache"}}catch(e){return this.logger.log(Xt.Debug,`Error in setContentAsync: ${e}`),{success:!1,fromCache:!1,objectUrl:null,error:String(e)}}}static async streamAndCreateUrl(e,t,n,r,o,i){this.loadingElements.add(e);const s=new AbortController;this.controllers.set(e,s);const a=await t.stream();let c=a;if(r){const e=await this.getCache();if(e){const[t,n]=a.tee();c=t,e.put(encodeURIComponent(r),new Response(n)).catch(e=>{this.logger.log(Xt.Debug,`Failed to put cache entry: ${e}`)})}}let l=null;try{const{aborted:t,chunks:a,bytesRead:h}=await this.readAllChunks(e,c,s,o);if(t)l=null;else if(0===h){if("number"==typeof o&&o>0)throw new Error("Stream was already consumed or at end position");l=null}else{const t=this.combineChunks(a),o=this.extractBaseMimeType(n),s=new Blob([t.slice()],{type:o}),c=URL.createObjectURL(s);this.setUrl(e,c,r,i),l=c}}finally{this.controllers.get(e)===s&&this.controllers.delete(e),this.loadingElements.delete(e),e.style.removeProperty("--blazor-media-progress")}return l}static async readAllChunks(e,t,n,r){const o=[];let i=0;for await(const s of this.iterateStream(t,n.signal)){if(n.signal.aborted)return{aborted:!0,chunks:o,bytesRead:i};if(o.push(s),i+=s.byteLength,r){const t=Math.min(1,i/r);e.style.setProperty("--blazor-media-progress",t.toString())}}return{aborted:n.signal.aborted,chunks:o,bytesRead:i}}static combineChunks(e){if(1===e.length)return e[0];const t=e.reduce((e,t)=>e+t.byteLength,0),n=new Uint8Array(t);let r=0;for(const t of e)n.set(t,r),r+=t.byteLength;return n}static setUrl(e,t,n,r){const o=this.tracked.get(e);if(o)try{URL.revokeObjectURL(o.url)}catch{}this.tracked.set(e,{url:t,cacheKey:n,attr:r}),this.setupEventHandlers(e,n),"src"===r?e.src=t:e.href=t}static async downloadAsync(e,t,n,r,o){if(!e||!o||!t)return!1;this.loadingElements.add(e);const i=new AbortController;this.controllers.set(e,i);try{const s=await t.stream();if("function"==typeof window.showSaveFilePicker)try{const t=await window.showSaveFilePicker({suggestedName:o}),n=await t.createWritable(),a=await this.writeStreamToFile(e,s,n,r,i);if("success"===a)return!0;if("aborted"===a)return!1}catch(e){this.logger.log(Xt.Debug,`Native picker streaming path failed or cancelled: ${e}`)}const a=await this.readAllChunks(e,s,i,r);if(a.aborted)return!1;const c=this.combineChunks(a.chunks),l=this.extractBaseMimeType(n),h=new Blob([c.slice()],{type:l}),d=URL.createObjectURL(h);return this.triggerDownload(d,o),!0}catch(e){return this.logger.log(Xt.Debug,`Error in downloadAsync: ${e}`),!1}finally{this.controllers.get(e)===i&&this.controllers.delete(e),this.loadingElements.delete(e),e.style.removeProperty("--blazor-media-progress")}}static async writeStreamToFile(e,t,n,r,o){let i=0;try{for await(const s of this.iterateStream(t,o?.signal)){if(o?.signal.aborted){try{await n.abort()}catch{}return e.style.removeProperty("--blazor-media-progress"),"aborted"}try{await n.write(s)}catch(e){if(o?.signal.aborted){try{await n.abort()}catch{}return"aborted"}return"error"}if(i+=s.byteLength,r){const t=Math.min(1,i/r);e.style.setProperty("--blazor-media-progress",t.toString())}}if(o?.signal.aborted){try{await n.abort()}catch{}return e.style.removeProperty("--blazor-media-progress"),"aborted"}try{await n.close()}catch(e){return o?.signal.aborted?"aborted":"error"}return"success"}catch(e){try{await n.abort()}catch{}return o?.signal.aborted?"aborted":"error"}finally{e.style.removeProperty("--blazor-media-progress")}}static triggerDownload(e,t){try{const n=document.createElement("a");n.href=e,n.download=t,n.style.display="none",document.body.appendChild(n),n.click(),setTimeout(()=>{try{n.remove(),URL.revokeObjectURL(e)}catch{}},0)}catch{}}static async getCache(){if(!("caches"in window))return this.logger.log(Xt.Warning,"Cache API not supported in this browser"),null;this.cachePromise||(this.cachePromise=(async()=>{try{return await caches.open(this.CACHE_NAME)}catch(e){return this.logger.log(Xt.Debug,`Failed to open cache: ${e}`),null}})());const e=await this.cachePromise;return e||(this.cachePromise=void 0),e}static setupEventHandlers(e,t=null){const n=()=>{t&&Yt.activeCacheKey.get(e)!==t||(Yt.loadingElements.delete(e),e.style.removeProperty("--blazor-media-progress"))};if(e.addEventListener("load",e=>{n()},{once:!0}),e.addEventListener("error",n=>{t&&Yt.activeCacheKey.get(e)!==t||(Yt.loadingElements.delete(e),e.style.removeProperty("--blazor-media-progress"),e.setAttribute("data-state","error"))},{once:!0}),e instanceof HTMLVideoElement){const t=e=>n();e.addEventListener("loadeddata",t,{once:!0})}}static async*iterateStream(e,t){const n=e.getReader();let r=!1;try{for(;;){if(t?.aborted){try{await n.cancel()}catch{}return}const{done:e,value:o}=await n.read();if(e)return void(r=!0);o&&(yield o)}}finally{if(!r)try{await n.cancel()}catch{}try{n.releaseLock?.()}catch{}}}static extractBaseMimeType(e){const t=e.indexOf(";");return-1!==t?e.substring(0,t).trim():e}static async tryMediaSourceVideoStreaming(e,t,n,r,o){try{if(!("MediaSource"in window)||!MediaSource.isTypeSupported(n))return null}catch{return null}this.loadingElements.add(e);const i=new AbortController;this.controllers.set(e,i);const s=new MediaSource,a=URL.createObjectURL(s);this.setUrl(e,a,r,"src");try{if(await new Promise((e,t)=>{s.addEventListener("sourceopen",()=>e(),{once:!0}),s.addEventListener("error",()=>t(new Error("MediaSource error event")),{once:!0})}),i.signal.aborted)return null;const c=s.addSourceBuffer(n),l=await t.stream();let h=l;if(r)try{const e=await this.getCache();if(e){const[t,n]=l.tee();h=t,e.put(encodeURIComponent(r),new Response(n)).catch(e=>this.logger.log(Xt.Debug,`Failed to put cache entry (MediaSource path): ${e}`))}}catch(e){this.logger.log(Xt.Debug,`Cache setup failed (MediaSource path): ${e}`)}let d=0;for await(const t of this.iterateStream(h,i.signal)){if(i.signal.aborted)break;if(c.updating&&(await new Promise(e=>{c.addEventListener("updateend",()=>e(),{once:!0})}),i.signal.aborted))break;try{const e=new Uint8Array(t.byteLength);e.set(t),c.appendBuffer(e)}catch(e){this.logger.log(Xt.Debug,`SourceBuffer append failed: ${e}`);try{s.endOfStream()}catch{}break}if(d+=t.byteLength,o){const t=Math.min(1,d/o);e.style.setProperty("--blazor-media-progress",t.toString())}}if(i.signal.aborted){try{URL.revokeObjectURL(a)}catch{}return null}c.updating&&await new Promise(e=>{c.addEventListener("updateend",()=>e(),{once:!0})});try{s.endOfStream()}catch{}return this.loadingElements.delete(e),e.style.removeProperty("--blazor-media-progress"),a}catch(t){try{URL.revokeObjectURL(a)}catch{}return this.revokeTrackedUrl(e),i.signal.aborted,null}finally{this.controllers.get(e)===i&&this.controllers.delete(e),i.signal.aborted&&(this.loadingElements.delete(e),e.style.removeProperty("--blazor-media-progress"))}}}const Qt={navigateTo:function(e,t,n=!1){It(e,t instanceof Object?t:{forceLoad:t,replaceHistoryEntry:n})},registerCustomEventType:function(e,t){if(!t)throw new Error("The options parameter is required.");if(i.has(e))throw new Error(`The event '${e}' is already registered.`);if(t.browserEventName&&e===t.browserEventName)throw new Error(`The custom event '${e}' cannot have the same name as its browserEventName '${t.browserEventName}'. Choose a different name for the custom event.`);if(t.browserEventName){const n=s.get(t.browserEventName);n?n.push(e):s.set(t.browserEventName,[e]),a.forEach(n=>n(e,t.browserEventName))}i.set(e,t)},rootComponents:w,runtime:{},_internal:{navigationManager:Et,domWrapper:Lt,Virtualize:Ut,PageTitle:Ht,InputFile:jt,NavigationLock:qt,getJSDataStreamChunk:Vt,attachWebRendererInterop:T,BinaryMedia:Yt}};window.Blazor=Qt;class Zt extends Error{constructor(e,t){const n=new.target.prototype;super(`${e}: Status code '${t}'`),this.statusCode=t,this.__proto__=n}}class en extends Error{constructor(e="A timeout occurred."){const t=new.target.prototype;super(e),this.__proto__=t}}class tn extends Error{constructor(e="An abort occurred."){const t=new.target.prototype;super(e),this.__proto__=t}}class nn extends Error{constructor(e,t){const n=new.target.prototype;super(e),this.transport=t,this.errorType="UnsupportedTransportError",this.__proto__=n}}class rn extends Error{constructor(e,t){const n=new.target.prototype;super(e),this.transport=t,this.errorType="DisabledTransportError",this.__proto__=n}}class on extends Error{constructor(e,t){const n=new.target.prototype;super(e),this.transport=t,this.errorType="FailedToStartTransportError",this.__proto__=n}}class sn extends Error{constructor(e){const t=new.target.prototype;super(e),this.errorType="FailedToNegotiateWithServerError",this.__proto__=t}}class an extends Error{constructor(e,t){const n=new.target.prototype;super(e),this.innerErrors=t,this.__proto__=n}}class cn{constructor(e,t,n){this.statusCode=e,this.statusText=t,this.content=n}}class ln{get(e,t){return this.send({...t,method:"GET",url:e})}post(e,t){return this.send({...t,method:"POST",url:e})}delete(e,t){return this.send({...t,method:"DELETE",url:e})}getCookieString(e){return""}}var hn,dn,un;!function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None"}(hn||(hn={}));class pn{constructor(){}log(e,t){}}pn.instance=new pn;class fn{static isRequired(e,t){if(null==e)throw new Error(`The '${t}' argument is required.`)}static isNotEmpty(e,t){if(!e||e.match(/^\s*$/))throw new Error(`The '${t}' argument should not be empty.`)}static isIn(e,t,n){if(!(e in t))throw new Error(`Unknown ${n} value: ${e}.`)}}class gn{static get isBrowser(){return"object"==typeof window&&"object"==typeof window.document}static get isWebWorker(){return"object"==typeof self&&"importScripts"in self}static get isReactNative(){return"object"==typeof window&&void 0===window.document}static get isNode(){return"undefined"!=typeof process&&process.release&&"node"===process.release.name}}function mn(e,t){let n="";return yn(e)?(n=`Binary data of length ${e.byteLength}`,t&&(n+=`. Content: '${function(e){const t=new Uint8Array(e);let n="";return t.forEach(e=>{n+=`0x${e<16?"0":""}${e.toString(16)} `}),n.substring(0,n.length-1)}(e)}'`)):"string"==typeof e&&(n=`String data of length ${e.length}`,t&&(n+=`. Content: '${e}'`)),n}function yn(e){return e&&"undefined"!=typeof ArrayBuffer&&(e instanceof ArrayBuffer||e.constructor&&"ArrayBuffer"===e.constructor.name)}async function vn(e,t,n,r,o,i){const s={},[a,c]=_n();s[a]=c,e.log(hn.Trace,`(${t} transport) sending data. ${mn(o,i.logMessageContent)}.`);const l=yn(o)?"arraybuffer":"text",h=await n.post(r,{content:o,headers:{...s,...i.headers},responseType:l,timeout:i.timeout,withCredentials:i.withCredentials});e.log(hn.Trace,`(${t} transport) request complete. Response status: ${h.statusCode}.`)}class bn{constructor(e,t){this._subject=e,this._observer=t}dispose(){const e=this._subject.observers.indexOf(this._observer);e>-1&&this._subject.observers.splice(e,1),0===this._subject.observers.length&&this._subject.cancelCallback&&this._subject.cancelCallback().catch(e=>{})}}class wn{constructor(e){this._minLevel=e,this.out=console}log(e,t){if(e>=this._minLevel){const n=`[${(new Date).toISOString()}] ${hn[e]}: ${t}`;switch(e){case hn.Critical:case hn.Error:this.out.error(n);break;case hn.Warning:this.out.warn(n);break;case hn.Information:this.out.info(n);break;default:this.out.log(n)}}}}function _n(){return["X-SignalR-User-Agent",Cn("11.0.0-preview.4.26203.108","","Browser",void 0)]}function Cn(e,t,n,r){let o="Microsoft SignalR/";const i=e.split(".");return o+=`${i[0]}.${i[1]}`,o+=` (${e}; `,o+=t&&""!==t?`${t}; `:"Unknown OS; ",o+=`${n}`,o+=r?`; ${r}`:"; Unknown Runtime Version",o+=")",o}function Sn(e){return e.stack?e.stack:e.message?e.message:`${e}`}class En extends ln{constructor(e){if(super(),this._logger=e,"undefined"==typeof fetch){const e="function"==typeof __webpack_require__?__non_webpack_require__:require;this._jar=new(e("tough-cookie").CookieJar),"undefined"==typeof fetch?this._fetchType=e("node-fetch"):this._fetchType=fetch,this._fetchType=e("fetch-cookie")(this._fetchType,this._jar)}else this._fetchType=fetch.bind(function(){if("undefined"!=typeof globalThis)return globalThis;if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw new Error("could not find global")}());if("undefined"==typeof AbortController){const e="function"==typeof __webpack_require__?__non_webpack_require__:require;this._abortControllerType=e("abort-controller")}else this._abortControllerType=AbortController}async send(e){if(e.abortSignal&&e.abortSignal.aborted)throw new tn;if(!e.method)throw new Error("No method defined.");if(!e.url)throw new Error("No url defined.");const t=new this._abortControllerType;let n;e.abortSignal&&(e.abortSignal.onabort=()=>{t.abort(),n=new tn});let r,o=null;if(e.timeout){const r=e.timeout;o=setTimeout(()=>{t.abort(),this._logger.log(hn.Warning,"Timeout from HTTP request."),n=new en},r)}""===e.content&&(e.content=void 0),e.content&&(e.headers=e.headers||{},yn(e.content)?e.headers["Content-Type"]="application/octet-stream":e.headers["Content-Type"]="text/plain;charset=UTF-8");try{r=await this._fetchType(e.url,{body:e.content,cache:"no-cache",credentials:!0===e.withCredentials?"include":"same-origin",headers:{"X-Requested-With":"XMLHttpRequest",...e.headers},method:e.method,mode:"cors",redirect:"follow",signal:t.signal})}catch(e){if(n)throw n;throw this._logger.log(hn.Warning,`Error from HTTP request. ${e}.`),e}finally{o&&clearTimeout(o),e.abortSignal&&(e.abortSignal.onabort=null)}if(!r.ok){const e=await In(r,"text");throw new Zt(e||r.statusText,r.status)}const i=In(r,e.responseType),s=await i;return new cn(r.status,r.statusText,s)}getCookieString(e){return""}}function In(e,t){let n;switch(t){case"arraybuffer":n=e.arrayBuffer();break;case"text":default:n=e.text();break;case"blob":case"document":case"json":throw new Error(`${t} is not supported.`)}return n}class kn extends ln{constructor(e){super(),this._logger=e}send(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new tn):e.method?e.url?new Promise((t,n)=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),r.withCredentials=void 0===e.withCredentials||e.withCredentials,r.setRequestHeader("X-Requested-With","XMLHttpRequest"),""===e.content&&(e.content=void 0),e.content&&(yn(e.content)?r.setRequestHeader("Content-Type","application/octet-stream"):r.setRequestHeader("Content-Type","text/plain;charset=UTF-8"));const o=e.headers;o&&Object.keys(o).forEach(e=>{r.setRequestHeader(e,o[e])}),e.responseType&&(r.responseType=e.responseType),e.abortSignal&&(e.abortSignal.onabort=()=>{r.abort(),n(new tn)}),e.timeout&&(r.timeout=e.timeout),r.onload=()=>{e.abortSignal&&(e.abortSignal.onabort=null),r.status>=200&&r.status<300?t(new cn(r.status,r.statusText,r.response||r.responseText)):n(new Zt(r.response||r.responseText||r.statusText,r.status))},r.onerror=()=>{this._logger.log(hn.Warning,`Error from HTTP request. ${r.status}: ${r.statusText}.`),n(new Zt(r.statusText,r.status))},r.ontimeout=()=>{this._logger.log(hn.Warning,"Timeout from HTTP request."),n(new en)},r.send(e.content)}):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}}class Rn extends ln{constructor(e){if(super(),"undefined"!=typeof fetch)this._httpClient=new En(e);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");this._httpClient=new kn(e)}}send(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new tn):e.method?e.url?this._httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}getCookieString(e){return this._httpClient.getCookieString(e)}}class Tn{static write(e){return`${e}${Tn.RecordSeparator}`}static parse(e){if(e[e.length-1]!==Tn.RecordSeparator)throw new Error("Message is incomplete.");const t=e.split(Tn.RecordSeparator);return t.pop(),t}}Tn.RecordSeparatorCode=30,Tn.RecordSeparator=String.fromCharCode(Tn.RecordSeparatorCode);class An{writeHandshakeRequest(e){return Tn.write(JSON.stringify(e))}parseHandshakeResponse(e){let t,n;if(yn(e)){const r=new Uint8Array(e),o=r.indexOf(Tn.RecordSeparatorCode);if(-1===o)throw new Error("Message is incomplete.");const i=o+1;t=String.fromCharCode.apply(null,Array.prototype.slice.call(r.slice(0,i))),n=r.byteLength>i?r.slice(i).buffer:null}else{const r=e,o=r.indexOf(Tn.RecordSeparator);if(-1===o)throw new Error("Message is incomplete.");const i=o+1;t=r.substring(0,i),n=r.length>i?r.substring(i):null}const r=Tn.parse(t),o=JSON.parse(r[0]);if(o.type)throw new Error("Expected a handshake response from the server.");return[n,o]}}!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close",e[e.Ack=8]="Ack",e[e.Sequence=9]="Sequence"}(dn||(dn={}));class Dn{constructor(){this.observers=[]}next(e){for(const t of this.observers)t.next(e)}error(e){for(const t of this.observers)t.error&&t.error(e)}complete(){for(const e of this.observers)e.complete&&e.complete()}subscribe(e){return this.observers.push(e),new bn(this,e)}}class Nn{constructor(e,t,n){this._bufferSize=1e5,this._messages=[],this._totalMessageCount=0,this._waitForSequenceMessage=!1,this._nextReceivingSequenceId=1,this._latestReceivedSequenceId=0,this._bufferedByteCount=0,this._reconnectInProgress=!1,this._protocol=e,this._connection=t,this._bufferSize=n}async _send(e){const t=this._protocol.writeMessage(e);let n=Promise.resolve();if(this._isInvocationMessage(e)){this._totalMessageCount++;let e=()=>{},r=()=>{};yn(t)?this._bufferedByteCount+=t.byteLength:this._bufferedByteCount+=t.length,this._bufferedByteCount>=this._bufferSize&&(n=new Promise((t,n)=>{e=t,r=n})),this._messages.push(new xn(t,this._totalMessageCount,e,r))}try{this._reconnectInProgress||await this._connection.send(t)}catch{this._disconnected()}await n}_ack(e){let t=-1;for(let n=0;nthis._nextReceivingSequenceId?this._connection.stop(new Error("Sequence ID greater than amount of messages we've received.")):this._nextReceivingSequenceId=e.sequenceId}_disconnected(){this._reconnectInProgress=!0,this._waitForSequenceMessage=!0}async _resend(){const e=0!==this._messages.length?this._messages[0]._id:this._totalMessageCount+1;await this._connection.send(this._protocol.writeMessage({type:dn.Sequence,sequenceId:e}));const t=this._messages;for(const e of t)await this._connection.send(e._message);this._reconnectInProgress=!1}_dispose(e){null!=e||(e=new Error("Unable to reconnect to server."));for(const t of this._messages)t._rejector(e)}_isInvocationMessage(e){switch(e.type){case dn.Invocation:case dn.StreamItem:case dn.Completion:case dn.StreamInvocation:case dn.CancelInvocation:return!0;case dn.Close:case dn.Sequence:case dn.Ping:case dn.Ack:return!1}}_ackTimer(){void 0===this._ackTimerHandle&&(this._ackTimerHandle=setTimeout(async()=>{try{this._reconnectInProgress||await this._connection.send(this._protocol.writeMessage({type:dn.Ack,sequenceId:this._latestReceivedSequenceId}))}catch{}clearTimeout(this._ackTimerHandle),this._ackTimerHandle=void 0},1e3))}}class xn{constructor(e,t,n,r){this._message=e,this._id=t,this._resolver=n,this._rejector=r}}!function(e){e.Disconnected="Disconnected",e.Connecting="Connecting",e.Connected="Connected",e.Disconnecting="Disconnecting",e.Reconnecting="Reconnecting"}(un||(un={}));class Mn{static create(e,t,n,r,o,i,s){return new Mn(e,t,n,r,o,i,s)}constructor(e,t,n,r,o,i,s){this._nextKeepAlive=0,this._freezeEventListener=()=>{this._logger.log(hn.Warning,"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep")},fn.isRequired(e,"connection"),fn.isRequired(t,"logger"),fn.isRequired(n,"protocol"),this.serverTimeoutInMilliseconds=null!=o?o:3e4,this.keepAliveIntervalInMilliseconds=null!=i?i:15e3,this._statefulReconnectBufferSize=null!=s?s:1e5,this._logger=t,this._protocol=n,this.connection=e,this._reconnectPolicy=r,this._handshakeProtocol=new An,this.connection.onreceive=e=>this._processIncomingData(e),this.connection.onclose=e=>this._connectionClosed(e),this._callbacks={},this._methods={},this._closedCallbacks=[],this._reconnectingCallbacks=[],this._reconnectedCallbacks=[],this._invocationId=0,this._receivedHandshakeResponse=!1,this._connectionState=un.Disconnected,this._connectionStarted=!1,this._cachedPingMessage=this._protocol.writeMessage({type:dn.Ping})}get state(){return this._connectionState}get connectionId(){return this.connection&&this.connection.connectionId||null}get baseUrl(){return this.connection.baseUrl||""}set baseUrl(e){if(this._connectionState!==un.Disconnected&&this._connectionState!==un.Reconnecting)throw new Error("The HubConnection must be in the Disconnected or Reconnecting state to change the url.");if(!e)throw new Error("The HubConnection url must be a valid url.");this.connection.baseUrl=e}start(){return this._startPromise=this._startWithStateTransitions(),this._startPromise}async _startWithStateTransitions(){if(this._connectionState!==un.Disconnected)return Promise.reject(new Error("Cannot start a HubConnection that is not in the 'Disconnected' state."));this._connectionState=un.Connecting,this._logger.log(hn.Debug,"Starting HubConnection.");try{await this._startInternal(),gn.isBrowser&&window.document.addEventListener("freeze",this._freezeEventListener),this._connectionState=un.Connected,this._connectionStarted=!0,this._logger.log(hn.Debug,"HubConnection connected successfully.")}catch(e){return this._connectionState=un.Disconnected,this._logger.log(hn.Debug,`HubConnection failed to start successfully because of error '${e}'.`),Promise.reject(e)}}async _startInternal(){this._stopDuringStartError=void 0,this._receivedHandshakeResponse=!1;const e=new Promise((e,t)=>{this._handshakeResolver=e,this._handshakeRejecter=t});await this.connection.start(this._protocol.transferFormat);try{let t=this._protocol.version;this.connection.features.reconnect||(t=1);const n={protocol:this._protocol.name,version:t};if(this._logger.log(hn.Debug,"Sending handshake request."),await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(n)),this._logger.log(hn.Information,`Using HubProtocol '${this._protocol.name}'.`),this._cleanupTimeout(),this._resetTimeoutPeriod(),this._resetKeepAliveInterval(),await e,this._stopDuringStartError)throw this._stopDuringStartError;!!this.connection.features.reconnect&&(this._messageBuffer=new Nn(this._protocol,this.connection,this._statefulReconnectBufferSize),this.connection.features.disconnected=this._messageBuffer._disconnected.bind(this._messageBuffer),this.connection.features.resend=()=>{if(this._messageBuffer)return this._messageBuffer._resend()}),this.connection.features.inherentKeepAlive||await this._sendMessage(this._cachedPingMessage)}catch(e){throw this._logger.log(hn.Debug,`Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`),this._cleanupTimeout(),this._cleanupPingTimer(),await this.connection.stop(e),e}}async stop(){const e=this._startPromise;this.connection.features.reconnect=!1,this._stopPromise=this._stopInternal(),await this._stopPromise;try{await e}catch(e){}}_stopInternal(e){if(this._connectionState===un.Disconnected)return this._logger.log(hn.Debug,`Call to HubConnection.stop(${e}) ignored because it is already in the disconnected state.`),Promise.resolve();if(this._connectionState===un.Disconnecting)return this._logger.log(hn.Debug,`Call to HttpConnection.stop(${e}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;const t=this._connectionState;return this._connectionState=un.Disconnecting,this._logger.log(hn.Debug,"Stopping HubConnection."),this._reconnectDelayHandle?(this._logger.log(hn.Debug,"Connection stopped during reconnect delay. Done reconnecting."),clearTimeout(this._reconnectDelayHandle),this._reconnectDelayHandle=void 0,this._completeClose(),Promise.resolve()):(t===un.Connected&&this._sendCloseMessage(),this._cleanupTimeout(),this._cleanupPingTimer(),this._stopDuringStartError=e||new tn("The connection was stopped before the hub handshake could complete."),this.connection.stop(e))}async _sendCloseMessage(){try{await this._sendWithProtocol(this._createCloseMessage())}catch{}}stream(e,...t){const[n,r]=this._replaceStreamingParams(t),o=this._createStreamInvocation(e,t,r);let i;const s=new Dn;return s.cancelCallback=()=>{const e=this._createCancelInvocation(o.invocationId);return delete this._callbacks[o.invocationId],i.then(()=>this._sendWithProtocol(e))},this._callbacks[o.invocationId]=(e,t)=>{t?s.error(t):e&&(e.type===dn.Completion?e.error?s.error(new Error(e.error)):s.complete():s.next(e.item))},i=this._sendWithProtocol(o).catch(e=>{s.error(e),delete this._callbacks[o.invocationId]}),this._launchStreams(n,i),s}_sendMessage(e){return this._resetKeepAliveInterval(),this.connection.send(e)}_sendWithProtocol(e){return this._messageBuffer?this._messageBuffer._send(e):this._sendMessage(this._protocol.writeMessage(e))}send(e,...t){const[n,r]=this._replaceStreamingParams(t),o=this._sendWithProtocol(this._createInvocation(e,t,!0,r));return this._launchStreams(n,o),o}invoke(e,...t){const[n,r]=this._replaceStreamingParams(t),o=this._createInvocation(e,t,!1,r);return new Promise((e,t)=>{this._callbacks[o.invocationId]=(n,r)=>{r?t(r):n&&(n.type===dn.Completion?n.error?t(new Error(n.error)):e(n.result):t(new Error(`Unexpected message type: ${n.type}`)))};const r=this._sendWithProtocol(o).catch(e=>{t(e),delete this._callbacks[o.invocationId]});this._launchStreams(n,r)})}on(e,t){e&&t&&(e=e.toLowerCase(),this._methods[e]||(this._methods[e]=[]),-1===this._methods[e].indexOf(t)&&this._methods[e].push(t))}off(e,t){if(!e)return;e=e.toLowerCase();const n=this._methods[e];if(n)if(t){const r=n.indexOf(t);-1!==r&&(n.splice(r,1),0===n.length&&delete this._methods[e])}else delete this._methods[e]}onclose(e){e&&this._closedCallbacks.push(e)}onreconnecting(e){e&&this._reconnectingCallbacks.push(e)}onreconnected(e){e&&this._reconnectedCallbacks.push(e)}_processIncomingData(e){if(this._cleanupTimeout(),this._receivedHandshakeResponse||(e=this._processHandshakeResponse(e),this._receivedHandshakeResponse=!0),e){const t=this._protocol.parseMessages(e,this._logger);for(const e of t)if(!this._messageBuffer||this._messageBuffer._shouldProcessMessage(e))switch(e.type){case dn.Invocation:this._invokeClientMethod(e).catch(e=>{this._logger.log(hn.Error,`Invoke client method threw error: ${Sn(e)}`)});break;case dn.StreamItem:case dn.Completion:{const t=this._callbacks[e.invocationId];if(t){e.type===dn.Completion&&delete this._callbacks[e.invocationId];try{t(e)}catch(e){this._logger.log(hn.Error,`Stream callback threw error: ${Sn(e)}`)}}break}case dn.Ping:break;case dn.Close:{this._logger.log(hn.Information,"Close message received from server.");const t=e.error?new Error("Server returned an error on close: "+e.error):void 0;!0===e.allowReconnect?this.connection.stop(t):this._stopPromise=this._stopInternal(t);break}case dn.Ack:this._messageBuffer&&this._messageBuffer._ack(e);break;case dn.Sequence:this._messageBuffer&&this._messageBuffer._resetSequence(e);break;default:this._logger.log(hn.Warning,`Invalid message type: ${e.type}.`)}}this._resetTimeoutPeriod()}_processHandshakeResponse(e){let t,n;try{[n,t]=this._handshakeProtocol.parseHandshakeResponse(e)}catch(e){const t="Error parsing handshake response: "+e;this._logger.log(hn.Error,t);const n=new Error(t);throw this._handshakeRejecter(n),n}if(t.error){const e="Server returned handshake error: "+t.error;this._logger.log(hn.Error,e);const n=new Error(e);throw this._handshakeRejecter(n),n}return this._logger.log(hn.Debug,"Server handshake complete."),this._handshakeResolver(),n}_resetKeepAliveInterval(){this.connection.features.inherentKeepAlive||(this._nextKeepAlive=(new Date).getTime()+this.keepAliveIntervalInMilliseconds,this._cleanupPingTimer())}_resetTimeoutPeriod(){if(!this.connection.features||!this.connection.features.inherentKeepAlive){this._timeoutHandle=setTimeout(()=>this.serverTimeout(),this.serverTimeoutInMilliseconds);let e=this._nextKeepAlive-(new Date).getTime();if(e<0)return void(this._connectionState===un.Connected&&this._trySendPingMessage());void 0===this._pingServerHandle&&(e<0&&(e=0),this._pingServerHandle=setTimeout(async()=>{this._connectionState===un.Connected&&await this._trySendPingMessage()},e))}}serverTimeout(){this.connection.stop(new Error("Server timeout elapsed without receiving a message from the server."))}async _invokeClientMethod(e){const t=e.target.toLowerCase(),n=this._methods[t];if(!n)return this._logger.log(hn.Warning,`No client method with the name '${t}' found.`),void(e.invocationId&&(this._logger.log(hn.Warning,`No result given for '${t}' method and invocation ID '${e.invocationId}'.`),await this._sendWithProtocol(this._createCompletionMessage(e.invocationId,"Client didn't provide a result.",null))));const r=n.slice(),o=!!e.invocationId;let i,s,a;for(const n of r)try{const r=i;i=await n.apply(this,e.arguments),o&&i&&r&&(this._logger.log(hn.Error,`Multiple results provided for '${t}'. Sending error to server.`),a=this._createCompletionMessage(e.invocationId,"Client provided multiple results.",null)),s=void 0}catch(e){s=e,this._logger.log(hn.Error,`A callback for the method '${t}' threw error '${e}'.`)}a?await this._sendWithProtocol(a):o?(s?a=this._createCompletionMessage(e.invocationId,`${s}`,null):void 0!==i?a=this._createCompletionMessage(e.invocationId,null,i):(this._logger.log(hn.Warning,`No result given for '${t}' method and invocation ID '${e.invocationId}'.`),a=this._createCompletionMessage(e.invocationId,"Client didn't provide a result.",null)),await this._sendWithProtocol(a)):i&&this._logger.log(hn.Error,`Result given for '${t}' method but server is not expecting a result.`)}_connectionClosed(e){this._logger.log(hn.Debug,`HubConnection.connectionClosed(${e}) called while in state ${this._connectionState}.`),this._stopDuringStartError=this._stopDuringStartError||e||new tn("The underlying connection was closed before the hub handshake could complete."),this._handshakeResolver&&this._handshakeResolver(),this._cancelCallbacksWithError(e||new Error("Invocation canceled due to the underlying connection being closed.")),this._cleanupTimeout(),this._cleanupPingTimer(),this._connectionState===un.Disconnecting?this._completeClose(e):this._connectionState===un.Connected&&this._reconnectPolicy?this._reconnect(e):this._connectionState===un.Connected&&this._completeClose(e)}_completeClose(e){if(this._connectionStarted){this._connectionState=un.Disconnected,this._connectionStarted=!1,this._messageBuffer&&(this._messageBuffer._dispose(null!=e?e:new Error("Connection closed.")),this._messageBuffer=void 0),gn.isBrowser&&window.document.removeEventListener("freeze",this._freezeEventListener);try{this._closedCallbacks.forEach(t=>t.apply(this,[e]))}catch(t){this._logger.log(hn.Error,`An onclose callback called with error '${e}' threw error '${t}'.`)}}}async _reconnect(e){const t=Date.now();let n=0,r=void 0!==e?e:new Error("Attempting to reconnect due to a unknown error."),o=this._getNextRetryDelay(n,0,r);if(null===o)return this._logger.log(hn.Debug,"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt."),void this._completeClose(e);if(this._connectionState=un.Reconnecting,e?this._logger.log(hn.Information,`Connection reconnecting because of error '${e}'.`):this._logger.log(hn.Information,"Connection reconnecting."),0!==this._reconnectingCallbacks.length){try{this._reconnectingCallbacks.forEach(t=>t.apply(this,[e]))}catch(t){this._logger.log(hn.Error,`An onreconnecting callback called with error '${e}' threw error '${t}'.`)}if(this._connectionState!==un.Reconnecting)return void this._logger.log(hn.Debug,"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.")}for(;null!==o;){if(this._logger.log(hn.Information,`Reconnect attempt number ${n+1} will start in ${o} ms.`),await new Promise(e=>{this._reconnectDelayHandle=setTimeout(e,o)}),this._reconnectDelayHandle=void 0,this._connectionState!==un.Reconnecting)return void this._logger.log(hn.Debug,"Connection left the reconnecting state during reconnect delay. Done reconnecting.");try{if(await this._startInternal(),this._connectionState=un.Connected,this._logger.log(hn.Information,"HubConnection reconnected successfully."),0!==this._reconnectedCallbacks.length)try{this._reconnectedCallbacks.forEach(e=>e.apply(this,[this.connection.connectionId]))}catch(e){this._logger.log(hn.Error,`An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`)}return}catch(e){if(this._logger.log(hn.Information,`Reconnect attempt failed because of error '${e}'.`),this._connectionState!==un.Reconnecting)return this._logger.log(hn.Debug,`Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`),void(this._connectionState===un.Disconnecting&&this._completeClose());n++,r=e instanceof Error?e:new Error(e.toString()),o=this._getNextRetryDelay(n,Date.now()-t,r)}}this._logger.log(hn.Information,`Reconnect retries have been exhausted after ${Date.now()-t} ms and ${n} failed attempts. Connection disconnecting.`),this._completeClose()}_getNextRetryDelay(e,t,n){try{return this._reconnectPolicy.nextRetryDelayInMilliseconds({elapsedMilliseconds:t,previousRetryCount:e,retryReason:n})}catch(n){return this._logger.log(hn.Error,`IRetryPolicy.nextRetryDelayInMilliseconds(${e}, ${t}) threw error '${n}'.`),null}}_cancelCallbacksWithError(e){const t=this._callbacks;this._callbacks={},Object.keys(t).forEach(n=>{const r=t[n];try{r(null,e)}catch(t){this._logger.log(hn.Error,`Stream 'error' callback called with '${e}' threw error: ${Sn(t)}`)}})}_cleanupPingTimer(){this._pingServerHandle&&(clearTimeout(this._pingServerHandle),this._pingServerHandle=void 0)}_cleanupTimeout(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}_createInvocation(e,t,n,r){if(n)return 0!==r.length?{target:e,arguments:t,streamIds:r,type:dn.Invocation}:{target:e,arguments:t,type:dn.Invocation};{const n=this._invocationId;return this._invocationId++,0!==r.length?{target:e,arguments:t,invocationId:n.toString(),streamIds:r,type:dn.Invocation}:{target:e,arguments:t,invocationId:n.toString(),type:dn.Invocation}}}_launchStreams(e,t){if(0!==e.length){t||(t=Promise.resolve());for(const n in e)e[n].subscribe({complete:()=>{t=t.then(()=>this._sendWithProtocol(this._createCompletionMessage(n)))},error:e=>{let r;r=e instanceof Error?e.message:e&&e.toString?e.toString():"Unknown error",t=t.then(()=>this._sendWithProtocol(this._createCompletionMessage(n,r)))},next:e=>{t=t.then(()=>this._sendWithProtocol(this._createStreamItemMessage(n,e)))}})}}_replaceStreamingParams(e){const t=[],n=[];for(let r=0;r0)&&(t=!1,this._accessToken=await this._accessTokenFactory()),this._setAuthorizationHeader(e);const n=await this._innerClient.send(e);return t&&401===n.statusCode&&this._accessTokenFactory?(this._accessToken=await this._accessTokenFactory(),this._setAuthorizationHeader(e),await this._innerClient.send(e)):n}_setAuthorizationHeader(e){e.headers||(e.headers={}),this._accessToken?e.headers[Un.Authorization]=`Bearer ${this._accessToken}`:this._accessTokenFactory&&e.headers[Un.Authorization]&&delete e.headers[Un.Authorization]}getCookieString(e){return this._innerClient.getCookieString(e)}}var On,Fn;!function(e){e[e.None=0]="None",e[e.WebSockets=1]="WebSockets",e[e.ServerSentEvents=2]="ServerSentEvents",e[e.LongPolling=4]="LongPolling"}(On||(On={})),function(e){e[e.Text=1]="Text",e[e.Binary=2]="Binary"}(Fn||(Fn={}));let $n=class{constructor(){this._isAborted=!1,this.onabort=null}abort(){this._isAborted||(this._isAborted=!0,this.onabort&&this.onabort())}get signal(){return this}get aborted(){return this._isAborted}};class Hn{get pollAborted(){return this._pollAbort.aborted}constructor(e,t,n){this._httpClient=e,this._logger=t,this._pollAbort=new $n,this._options=n,this._running=!1,this.onreceive=null,this.onclose=null}async connect(e,t){if(fn.isRequired(e,"url"),fn.isRequired(t,"transferFormat"),fn.isIn(t,Fn,"transferFormat"),this._url=e,this._logger.log(hn.Trace,"(LongPolling transport) Connecting."),t===Fn.Binary&&"undefined"!=typeof XMLHttpRequest&&"string"!=typeof(new XMLHttpRequest).responseType)throw new Error("Binary protocols over XmlHttpRequest not implementing advanced features are not supported.");const[n,r]=_n(),o={[n]:r,...this._options.headers},i={abortSignal:this._pollAbort.signal,headers:o,timeout:1e5,withCredentials:this._options.withCredentials};t===Fn.Binary&&(i.responseType="arraybuffer");const s=`${e}&_=${Date.now()}`;this._logger.log(hn.Trace,`(LongPolling transport) polling: ${s}.`);const a=await this._httpClient.get(s,i);200!==a.statusCode?(this._logger.log(hn.Error,`(LongPolling transport) Unexpected response code: ${a.statusCode}.`),this._closeError=new Zt(a.statusText||"",a.statusCode),this._running=!1):this._running=!0,this._receiving=this._poll(this._url,i)}async _poll(e,t){try{for(;this._running;)try{const n=`${e}&_=${Date.now()}`;this._logger.log(hn.Trace,`(LongPolling transport) polling: ${n}.`);const r=await this._httpClient.get(n,t);204===r.statusCode?(this._logger.log(hn.Information,"(LongPolling transport) Poll terminated by server."),this._running=!1):200!==r.statusCode?(this._logger.log(hn.Error,`(LongPolling transport) Unexpected response code: ${r.statusCode}.`),this._closeError=new Zt(r.statusText||"",r.statusCode),this._running=!1):r.content?(this._logger.log(hn.Trace,`(LongPolling transport) data received. ${mn(r.content,this._options.logMessageContent)}.`),this.onreceive&&this.onreceive(r.content)):this._logger.log(hn.Trace,"(LongPolling transport) Poll timed out, reissuing.")}catch(e){this._running?e instanceof en?this._logger.log(hn.Trace,"(LongPolling transport) Poll timed out, reissuing."):(this._closeError=e,this._running=!1):this._logger.log(hn.Trace,`(LongPolling transport) Poll errored after shutdown: ${e.message}`)}}finally{this._logger.log(hn.Trace,"(LongPolling transport) Polling complete."),this.pollAborted||this._raiseOnClose()}}async send(e){return this._running?vn(this._logger,"LongPolling",this._httpClient,this._url,e,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}async stop(){this._logger.log(hn.Trace,"(LongPolling transport) Stopping polling."),this._running=!1,this._pollAbort.abort();try{await this._receiving,this._logger.log(hn.Trace,`(LongPolling transport) sending DELETE request to ${this._url}.`);const e={},[t,n]=_n();e[t]=n;const r={headers:{...e,...this._options.headers},timeout:this._options.timeout,withCredentials:this._options.withCredentials};let o;try{await this._httpClient.delete(this._url,r)}catch(e){o=e}o?o instanceof Zt&&(404===o.statusCode?this._logger.log(hn.Trace,"(LongPolling transport) A 404 response was returned from sending a DELETE request."):this._logger.log(hn.Trace,`(LongPolling transport) Error sending a DELETE request: ${o}`)):this._logger.log(hn.Trace,"(LongPolling transport) DELETE request accepted.")}finally{this._logger.log(hn.Trace,"(LongPolling transport) Stop finished."),this._raiseOnClose()}}_raiseOnClose(){if(this.onclose){let e="(LongPolling transport) Firing onclose event.";this._closeError&&(e+=" Error: "+this._closeError),this._logger.log(hn.Trace,e),this.onclose(this._closeError)}}}class jn{constructor(e,t,n,r){this._httpClient=e,this._accessToken=t,this._logger=n,this._options=r,this.onreceive=null,this.onclose=null}async connect(e,t){return fn.isRequired(e,"url"),fn.isRequired(t,"transferFormat"),fn.isIn(t,Fn,"transferFormat"),this._logger.log(hn.Trace,"(SSE transport) Connecting."),this._url=e,this._accessToken&&(e+=(e.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(this._accessToken)}`),new Promise((n,r)=>{let o,i=!1;if(t===Fn.Text){if(gn.isBrowser||gn.isWebWorker)o=new this._options.EventSource(e,{withCredentials:this._options.withCredentials});else{const t=this._httpClient.getCookieString(e),n={};n.Cookie=t;const[r,i]=_n();n[r]=i,o=new this._options.EventSource(e,{withCredentials:this._options.withCredentials,headers:{...n,...this._options.headers}})}try{o.onmessage=e=>{if(this.onreceive)try{this._logger.log(hn.Trace,`(SSE transport) data received. ${mn(e.data,this._options.logMessageContent)}.`),this.onreceive(e.data)}catch(e){return void this._close(e)}},o.onerror=e=>{i?this._close():r(new Error("EventSource failed to connect. The connection could not be found on the server, either the connection ID is not present on the server, or a proxy is refusing/buffering the connection. If you have multiple servers check that sticky sessions are enabled."))},o.onopen=()=>{this._logger.log(hn.Information,`SSE connected to ${this._url}`),this._eventSource=o,i=!0,n()}}catch(e){return void r(e)}}else r(new Error("The Server-Sent Events transport only supports the 'Text' transfer format"))})}async send(e){return this._eventSource?vn(this._logger,"SSE",this._httpClient,this._url,e,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}stop(){return this._close(),Promise.resolve()}_close(e){this._eventSource&&(this._eventSource.close(),this._eventSource=void 0,this.onclose&&this.onclose(e))}}class Wn{constructor(e,t,n,r,o,i){this._logger=n,this._accessTokenFactory=t,this._logMessageContent=r,this._webSocketConstructor=o,this._httpClient=e,this.onreceive=null,this.onclose=null,this._headers=i}async connect(e,t){let n;return fn.isRequired(e,"url"),fn.isRequired(t,"transferFormat"),fn.isIn(t,Fn,"transferFormat"),this._logger.log(hn.Trace,"(WebSockets transport) Connecting."),this._accessTokenFactory&&(n=await this._accessTokenFactory()),new Promise((r,o)=>{let i;e=e.replace(/^http/,"ws");const s=this._httpClient.getCookieString(e);let a=!1;if(gn.isReactNative){const t={},[r,o]=_n();t[r]=o,n&&(t[Un.Authorization]=`Bearer ${n}`),s&&(t[Un.Cookie]=s),i=new this._webSocketConstructor(e,void 0,{headers:{...t,...this._headers}})}else n&&(e+=(e.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(n)}`);i||(i=new this._webSocketConstructor(e)),t===Fn.Binary&&(i.binaryType="arraybuffer"),i.onopen=t=>{this._logger.log(hn.Information,`WebSocket connected to ${e}.`),this._webSocket=i,a=!0,r()},i.onerror=e=>{let t=null;t="undefined"!=typeof ErrorEvent&&e instanceof ErrorEvent?e.error:"There was an error with the transport",this._logger.log(hn.Information,`(WebSockets transport) ${t}.`)},i.onmessage=e=>{if(this._logger.log(hn.Trace,`(WebSockets transport) data received. ${mn(e.data,this._logMessageContent)}.`),this.onreceive)try{this.onreceive(e.data)}catch(e){return void this._close(e)}},i.onclose=e=>{if(a)this._close(e);else{let t=null;t="undefined"!=typeof ErrorEvent&&e instanceof ErrorEvent?e.error:"WebSocket failed to connect. The connection could not be found on the server, either the endpoint may not be a SignalR endpoint, the connection ID is not present on the server, or there is a proxy blocking WebSockets. If you have multiple servers check that sticky sessions are enabled.",o(new Error(t))}}})}send(e){return this._webSocket&&this._webSocket.readyState===this._webSocketConstructor.OPEN?(this._logger.log(hn.Trace,`(WebSockets transport) sending data. ${mn(e,this._logMessageContent)}.`),this._webSocket.send(e),Promise.resolve()):Promise.reject("WebSocket is not in the OPEN state")}stop(){return this._webSocket&&this._close(void 0),Promise.resolve()}_close(e){this._webSocket&&(this._webSocket.onclose=()=>{},this._webSocket.onmessage=()=>{},this._webSocket.onerror=()=>{},this._webSocket.close(),this._webSocket=void 0),this._logger.log(hn.Trace,"(WebSockets transport) socket closed."),this.onclose&&(!this._isCloseEvent(e)||!1!==e.wasClean&&1e3===e.code?e instanceof Error?this.onclose(e):this.onclose():this.onclose(new Error(`WebSocket closed with status code: ${e.code} (${e.reason||"no reason given"}).`)))}_isCloseEvent(e){return e&&"boolean"==typeof e.wasClean&&"number"==typeof e.code}}class zn{constructor(e,t={}){if(this._stopPromiseResolver=()=>{},this.features={},this._negotiateVersion=1,fn.isRequired(e,"url"),this._logger=function(e){return void 0===e?new wn(hn.Information):null===e?pn.instance:void 0!==e.log?e:new wn(e)}(t.logger),this.baseUrl=this._resolveUrl(e),(t=t||{}).logMessageContent=void 0!==t.logMessageContent&&t.logMessageContent,"boolean"!=typeof t.withCredentials&&void 0!==t.withCredentials)throw new Error("withCredentials option was not a 'boolean' or 'undefined' value");t.withCredentials=void 0===t.withCredentials||t.withCredentials,t.timeout=void 0===t.timeout?1e5:t.timeout,"undefined"==typeof WebSocket||t.WebSocket||(t.WebSocket=WebSocket),"undefined"==typeof EventSource||t.EventSource||(t.EventSource=EventSource),this._httpClient=new Bn(t.httpClient||new Rn(this._logger),t.accessTokenFactory),this._connectionState="Disconnected",this._connectionStarted=!1,this._options=t,this.onreceive=null,this.onclose=null}async start(e){if(e=e||Fn.Binary,fn.isIn(e,Fn,"transferFormat"),this._logger.log(hn.Debug,`Starting connection with transfer format '${Fn[e]}'.`),"Disconnected"!==this._connectionState)return Promise.reject(new Error("Cannot start an HttpConnection that is not in the 'Disconnected' state."));if(this._connectionState="Connecting",this._startInternalPromise=this._startInternal(e),await this._startInternalPromise,"Disconnecting"===this._connectionState){const e="Failed to start the HttpConnection before stop() was called.";return this._logger.log(hn.Error,e),await this._stopPromise,Promise.reject(new tn(e))}if("Connected"!==this._connectionState){const e="HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!";return this._logger.log(hn.Error,e),Promise.reject(new tn(e))}this._connectionStarted=!0}send(e){return"Connected"!==this._connectionState?Promise.reject(new Error("Cannot send data if the connection is not in the 'Connected' State.")):(this._sendQueue||(this._sendQueue=new qn(this.transport)),this._sendQueue.send(e))}async stop(e){return"Disconnected"===this._connectionState?(this._logger.log(hn.Debug,`Call to HttpConnection.stop(${e}) ignored because the connection is already in the disconnected state.`),Promise.resolve()):"Disconnecting"===this._connectionState?(this._logger.log(hn.Debug,`Call to HttpConnection.stop(${e}) ignored because the connection is already in the disconnecting state.`),this._stopPromise):(this._connectionState="Disconnecting",this._stopPromise=new Promise(e=>{this._stopPromiseResolver=e}),await this._stopInternal(e),void await this._stopPromise)}async _stopInternal(e){this._stopError=e;try{await this._startInternalPromise}catch(e){}if(this.transport){try{await this.transport.stop()}catch(e){this._logger.log(hn.Error,`HttpConnection.transport.stop() threw error '${e}'.`),this._stopConnection()}this.transport=void 0}else this._logger.log(hn.Debug,"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.")}async _startInternal(e){let t=this.baseUrl;this._accessTokenFactory=this._options.accessTokenFactory,this._httpClient._accessTokenFactory=this._accessTokenFactory;try{if(this._options.skipNegotiation){if(this._options.transport!==On.WebSockets)throw new Error("Negotiation can only be skipped when using the WebSocket transport directly.");this.transport=this._constructTransport(On.WebSockets),await this._startTransport(t,e)}else{let n=null,r=0;do{if(n=await this._getNegotiationResponse(t),"Disconnecting"===this._connectionState||"Disconnected"===this._connectionState)throw new tn("The connection was stopped during negotiation.");if(n.error)throw new Error(n.error);if(n.ProtocolVersion)throw new Error("Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.");if(n.url&&(t=n.url),n.accessToken){const e=n.accessToken;this._accessTokenFactory=()=>e,this._httpClient._accessToken=e,this._httpClient._accessTokenFactory=void 0}r++}while(n.url&&r<100);if(100===r&&n.url)throw new Error("Negotiate redirection limit exceeded.");await this._createTransport(t,this._options.transport,n,e)}this.transport instanceof Hn&&(this.features.inherentKeepAlive=!0),"Connecting"===this._connectionState&&(this._logger.log(hn.Debug,"The HttpConnection connected successfully."),this._connectionState="Connected")}catch(e){return this._logger.log(hn.Error,"Failed to start the connection: "+e),this._connectionState="Disconnected",this.transport=void 0,this._stopPromiseResolver(),Promise.reject(e)}}async _getNegotiationResponse(e){const t={},[n,r]=_n();t[n]=r;const o=this._resolveNegotiateUrl(e);this._logger.log(hn.Debug,`Sending negotiation request: ${o}.`);try{const e=await this._httpClient.post(o,{content:"",headers:{...t,...this._options.headers},timeout:this._options.timeout,withCredentials:this._options.withCredentials});if(200!==e.statusCode)return Promise.reject(new Error(`Unexpected status code returned from negotiate '${e.statusCode}'`));const n=JSON.parse(e.content);return(!n.negotiateVersion||n.negotiateVersion<1)&&(n.connectionToken=n.connectionId),n.useStatefulReconnect&&!0!==this._options._useStatefulReconnect?Promise.reject(new sn("Client didn't negotiate Stateful Reconnect but the server did.")):n}catch(e){let t="Failed to complete negotiation with the server: "+e;return e instanceof Zt&&404===e.statusCode&&(t+=" Either this is not a SignalR endpoint or there is a proxy blocking the connection."),this._logger.log(hn.Error,t),Promise.reject(new sn(t))}}_createConnectUrl(e,t){return t?e+(-1===e.indexOf("?")?"?":"&")+`id=${t}`:e}async _createTransport(e,t,n,r){let o=this._createConnectUrl(e,n.connectionToken);if(this._isITransport(t))return this._logger.log(hn.Debug,"Connection was provided an instance of ITransport, using that directly."),this.transport=t,await this._startTransport(o,r),void(this.connectionId=n.connectionId);const i=[],s=n.availableTransports||[];let a=n;for(const n of s){const s=this._resolveTransportOrError(n,t,r,!0===(null==a?void 0:a.useStatefulReconnect));if(s instanceof Error)i.push(`${n.transport} failed:`),i.push(s);else if(this._isITransport(s)){if(this.transport=s,!a){try{a=await this._getNegotiationResponse(e)}catch(e){return Promise.reject(e)}o=this._createConnectUrl(e,a.connectionToken)}try{return await this._startTransport(o,r),void(this.connectionId=a.connectionId)}catch(e){if(this._logger.log(hn.Error,`Failed to start the transport '${n.transport}': ${e}`),a=void 0,i.push(new on(`${n.transport} failed: ${e}`,On[n.transport])),"Connecting"!==this._connectionState){const e="Failed to select transport before stop() was called.";return this._logger.log(hn.Debug,e),Promise.reject(new tn(e))}}}}return i.length>0?Promise.reject(new an(`Unable to connect to the server with any of the available transports. ${i.join(" ")}`,i)):Promise.reject(new Error("None of the transports supported by the client are supported by the server."))}_constructTransport(e){switch(e){case On.WebSockets:if(!this._options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Wn(this._httpClient,this._accessTokenFactory,this._logger,this._options.logMessageContent,this._options.WebSocket,this._options.headers||{});case On.ServerSentEvents:if(!this._options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new jn(this._httpClient,this._httpClient._accessToken,this._logger,this._options);case On.LongPolling:return new Hn(this._httpClient,this._logger,this._options);default:throw new Error(`Unknown transport: ${e}.`)}}_startTransport(e,t){return this.transport.onreceive=this.onreceive,this.features.reconnect?this.transport.onclose=async n=>{let r=!1;if(this.features.reconnect){try{this.features.disconnected(),await this.transport.connect(e,t),await this.features.resend()}catch{r=!0}r&&this._stopConnection(n)}else this._stopConnection(n)}:this.transport.onclose=e=>this._stopConnection(e),this.transport.connect(e,t)}_resolveTransportOrError(e,t,n,r){const o=On[e.transport];if(null==o)return this._logger.log(hn.Debug,`Skipping transport '${e.transport}' because it is not supported by this client.`),new Error(`Skipping transport '${e.transport}' because it is not supported by this client.`);if(!function(e,t){return!e||0!==(t&e)}(t,o))return this._logger.log(hn.Debug,`Skipping transport '${On[o]}' because it was disabled by the client.`),new rn(`'${On[o]}' is disabled by the client.`,o);if(!(e.transferFormats.map(e=>Fn[e]).indexOf(n)>=0))return this._logger.log(hn.Debug,`Skipping transport '${On[o]}' because it does not support the requested transfer format '${Fn[n]}'.`),new Error(`'${On[o]}' does not support ${Fn[n]}.`);if(o===On.WebSockets&&!this._options.WebSocket||o===On.ServerSentEvents&&!this._options.EventSource)return this._logger.log(hn.Debug,`Skipping transport '${On[o]}' because it is not supported in your environment.'`),new nn(`'${On[o]}' is not supported in your environment.`,o);this._logger.log(hn.Debug,`Selecting transport '${On[o]}'.`);try{return this.features.reconnect=o===On.WebSockets?r:void 0,this._constructTransport(o)}catch(e){return e}}_isITransport(e){return e&&"object"==typeof e&&"connect"in e}_stopConnection(e){if(this._logger.log(hn.Debug,`HttpConnection.stopConnection(${e}) called while in state ${this._connectionState}.`),this.transport=void 0,e=this._stopError||e,this._stopError=void 0,"Disconnected"!==this._connectionState){if("Connecting"===this._connectionState)throw this._logger.log(hn.Warning,`Call to HttpConnection.stopConnection(${e}) was ignored because the connection is still in the connecting state.`),new Error(`HttpConnection.stopConnection(${e}) was called while the connection is still in the connecting state.`);if("Disconnecting"===this._connectionState&&this._stopPromiseResolver(),e?this._logger.log(hn.Error,`Connection disconnected with error '${e}'.`):this._logger.log(hn.Information,"Connection disconnected."),this._sendQueue&&(this._sendQueue.stop().catch(e=>{this._logger.log(hn.Error,`TransportSendQueue.stop() threw error '${e}'.`)}),this._sendQueue=void 0),this.connectionId=void 0,this._connectionState="Disconnected",this._connectionStarted){this._connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this._logger.log(hn.Error,`HttpConnection.onclose(${e}) threw error '${t}'.`)}}}else this._logger.log(hn.Debug,`Call to HttpConnection.stopConnection(${e}) was ignored because the connection is already in the disconnected state.`)}_resolveUrl(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!gn.isBrowser)throw new Error(`Cannot resolve '${e}'.`);const t=window.document.createElement("a");return t.href=e,this._logger.log(hn.Information,`Normalizing '${e}' to '${t.href}'.`),t.href}_resolveNegotiateUrl(e){const t=new URL(e);t.pathname.endsWith("/")?t.pathname+="negotiate":t.pathname+="/negotiate";const n=new URLSearchParams(t.searchParams);return n.has("negotiateVersion")||n.append("negotiateVersion",this._negotiateVersion.toString()),n.has("useStatefulReconnect")?"true"===n.get("useStatefulReconnect")&&(this._options._useStatefulReconnect=!0):!0===this._options._useStatefulReconnect&&n.append("useStatefulReconnect","true"),t.search=n.toString(),t.toString()}}class qn{constructor(e){this._transport=e,this._buffer=[],this._executing=!0,this._sendBufferedData=new Jn,this._transportResult=new Jn,this._sendLoopPromise=this._sendLoop()}send(e){return this._bufferData(e),this._transportResult||(this._transportResult=new Jn),this._transportResult.promise}stop(){return this._executing=!1,this._sendBufferedData.resolve(),this._sendLoopPromise}_bufferData(e){if(this._buffer.length&&typeof this._buffer[0]!=typeof e)throw new Error(`Expected data to be of type ${typeof this._buffer} but was of type ${typeof e}`);this._buffer.push(e),this._sendBufferedData.resolve()}async _sendLoop(){for(;;){if(await this._sendBufferedData.promise,!this._executing){this._transportResult&&this._transportResult.reject("Connection stopped.");break}this._sendBufferedData=new Jn;const e=this._transportResult;this._transportResult=void 0;const t="string"==typeof this._buffer[0]?this._buffer.join(""):qn._concatBuffers(this._buffer);this._buffer.length=0;try{await this._transport.send(t),e.resolve()}catch(t){e.reject(t)}}}static _concatBuffers(e){const t=e.map(e=>e.byteLength).reduce((e,t)=>e+t),n=new Uint8Array(t);let r=0;for(const t of e)n.set(new Uint8Array(t),r),r+=t.byteLength;return n.buffer}}class Jn{constructor(){this.promise=new Promise((e,t)=>[this._resolver,this._rejecter]=[e,t])}resolve(){this._resolver()}reject(e){this._rejecter(e)}}class Vn{constructor(){this.name="json",this.version=2,this.transferFormat=Fn.Text}parseMessages(e,t){if("string"!=typeof e)throw new Error("Invalid input for JSON hub protocol. Expected a string.");if(!e)return[];null===t&&(t=pn.instance);const n=Tn.parse(e),r=[];for(const e of n){const n=JSON.parse(e);if("number"!=typeof n.type)throw new Error("Invalid payload.");switch(n.type){case dn.Invocation:this._isInvocationMessage(n);break;case dn.StreamItem:this._isStreamItemMessage(n);break;case dn.Completion:this._isCompletionMessage(n);break;case dn.Ping:case dn.Close:break;case dn.Ack:this._isAckMessage(n);break;case dn.Sequence:this._isSequenceMessage(n);break;default:t.log(hn.Information,"Unknown message type '"+n.type+"' ignored.");continue}r.push(n)}return r}writeMessage(e){return Tn.write(JSON.stringify(e))}_isInvocationMessage(e){this._assertNotEmptyString(e.target,"Invalid payload for Invocation message."),void 0!==e.invocationId&&this._assertNotEmptyString(e.invocationId,"Invalid payload for Invocation message.")}_isStreamItemMessage(e){if(this._assertNotEmptyString(e.invocationId,"Invalid payload for StreamItem message."),void 0===e.item)throw new Error("Invalid payload for StreamItem message.")}_isCompletionMessage(e){if(e.result&&e.error)throw new Error("Invalid payload for Completion message.");!e.result&&e.error&&this._assertNotEmptyString(e.error,"Invalid payload for Completion message."),this._assertNotEmptyString(e.invocationId,"Invalid payload for Completion message.")}_isAckMessage(e){if("number"!=typeof e.sequenceId)throw new Error("Invalid SequenceId for Ack message.")}_isSequenceMessage(e){if("number"!=typeof e.sequenceId)throw new Error("Invalid SequenceId for Sequence message.")}_assertNotEmptyString(e,t){if("string"!=typeof e||""===e)throw new Error(t)}}const Kn={trace:hn.Trace,debug:hn.Debug,info:hn.Information,information:hn.Information,warn:hn.Warning,warning:hn.Warning,error:hn.Error,critical:hn.Critical,none:hn.None};class Xn{configureLogging(e){if(fn.isRequired(e,"logging"),function(e){return void 0!==e.log}(e))this.logger=e;else if("string"==typeof e){const t=function(e){const t=Kn[e.toLowerCase()];if(void 0!==t)return t;throw new Error(`Unknown log level: ${e}`)}(e);this.logger=new wn(t)}else this.logger=new wn(e);return this}withUrl(e,t){return fn.isRequired(e,"url"),fn.isNotEmpty(e,"url"),this.url=e,this.httpConnectionOptions="object"==typeof t?{...this.httpConnectionOptions,...t}:{...this.httpConnectionOptions,transport:t},this}withHubProtocol(e){return fn.isRequired(e,"protocol"),this.protocol=e,this}withAutomaticReconnect(e){if(this.reconnectPolicy)throw new Error("A reconnectPolicy has already been set.");return e?Array.isArray(e)?this.reconnectPolicy=new Ln(e):this.reconnectPolicy=e:this.reconnectPolicy=new Ln,this}withServerTimeout(e){return fn.isRequired(e,"milliseconds"),this._serverTimeoutInMilliseconds=e,this}withKeepAliveInterval(e){return fn.isRequired(e,"milliseconds"),this._keepAliveIntervalInMilliseconds=e,this}withStatefulReconnect(e){return void 0===this.httpConnectionOptions&&(this.httpConnectionOptions={}),this.httpConnectionOptions._useStatefulReconnect=!0,this._statefulReconnectBufferSize=null==e?void 0:e.bufferSize,this}build(){const e=this.httpConnectionOptions||{};if(void 0===e.logger&&(e.logger=this.logger),!this.url)throw new Error("The 'HubConnectionBuilder.withUrl' method must be called before building the connection.");const t=new zn(this.url,e);return Mn.create(t,this.logger||pn.instance,this.protocol||new Vn,this.reconnectPolicy,this._serverTimeoutInMilliseconds,this._keepAliveIntervalInMilliseconds,this._statefulReconnectBufferSize)}}var Gn;!function(e){e[e.Default=0]="Default",e[e.Server=1]="Server",e[e.WebAssembly=2]="WebAssembly",e[e.WebView=3]="WebView"}(Gn||(Gn={}));var Yn,Qn,Zn,er=4294967295;function tr(e,t,n){var r=Math.floor(n/4294967296),o=n;e.setUint32(t,r),e.setUint32(t+4,o)}function nr(e,t){return 4294967296*e.getInt32(t)+e.getUint32(t+4)}var rr=("undefined"==typeof process||"never"!==(null===(Yn=null===process||void 0===process?void 0:process.env)||void 0===Yn?void 0:Yn.TEXT_ENCODING))&&"undefined"!=typeof TextEncoder&&"undefined"!=typeof TextDecoder;function or(e){for(var t=e.length,n=0,r=0;r=55296&&o<=56319&&r65535&&(h-=65536,i.push(h>>>10&1023|55296),h=56320|1023&h),i.push(h)}else i.push(a);else i.push(a);i.length>=4096&&(s+=String.fromCharCode.apply(String,i),i.length=0)}return i.length>0&&(s+=String.fromCharCode.apply(String,i)),s}var lr,hr=rr?new TextDecoder:null,dr=rr?"undefined"!=typeof process&&"force"!==(null===(Zn=null===process||void 0===process?void 0:process.env)||void 0===Zn?void 0:Zn.TEXT_DECODER)?200:0:er,ur=function(e,t){this.type=e,this.data=t},pr=(lr=function(e,t){return lr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},lr(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}lr(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),fr=function(e){function t(n){var r=e.call(this,n)||this,o=Object.create(t.prototype);return Object.setPrototypeOf(r,o),Object.defineProperty(r,"name",{configurable:!0,enumerable:!1,value:t.name}),r}return pr(t,e),t}(Error),gr={type:-1,encode:function(e){var t,n,r,o;return e instanceof Date?function(e){var t,n=e.sec,r=e.nsec;if(n>=0&&r>=0&&n<=17179869183){if(0===r&&n<=4294967295){var o=new Uint8Array(4);return(t=new DataView(o.buffer)).setUint32(0,n),o}var i=n/4294967296,s=4294967295&n;return o=new Uint8Array(8),(t=new DataView(o.buffer)).setUint32(0,r<<2|3&i),t.setUint32(4,s),o}return o=new Uint8Array(12),(t=new DataView(o.buffer)).setUint32(0,r),tr(t,4,n),o}((r=1e6*((t=e.getTime())-1e3*(n=Math.floor(t/1e3))),{sec:n+(o=Math.floor(r/1e9)),nsec:r-1e9*o})):null},decode:function(e){var t=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 4:return{sec:t.getUint32(0),nsec:0};case 8:var n=t.getUint32(0);return{sec:4294967296*(3&n)+t.getUint32(4),nsec:n>>>2};case 12:return{sec:nr(t,4),nsec:t.getUint32(0)};default:throw new fr("Unrecognized data size for timestamp (expected 4, 8, or 12): ".concat(e.length))}}(e);return new Date(1e3*t.sec+t.nsec/1e6)}},mr=function(){function e(){this.builtInEncoders=[],this.builtInDecoders=[],this.encoders=[],this.decoders=[],this.register(gr)}return e.prototype.register=function(e){var t=e.type,n=e.encode,r=e.decode;if(t>=0)this.encoders[t]=n,this.decoders[t]=r;else{var o=1+t;this.builtInEncoders[o]=n,this.builtInDecoders[o]=r}},e.prototype.tryToEncode=function(e,t){for(var n=0;nthis.maxDepth)throw new Error("Too deep objects in depth ".concat(t));null==e?this.encodeNil():"boolean"==typeof e?this.encodeBoolean(e):"number"==typeof e?this.encodeNumber(e):"string"==typeof e?this.encodeString(e):this.encodeObject(e,t)},e.prototype.ensureBufferSizeToWrite=function(e){var t=this.pos+e;this.view.byteLength=0?e<128?this.writeU8(e):e<256?(this.writeU8(204),this.writeU8(e)):e<65536?(this.writeU8(205),this.writeU16(e)):e<4294967296?(this.writeU8(206),this.writeU32(e)):(this.writeU8(207),this.writeU64(e)):e>=-32?this.writeU8(224|e+32):e>=-128?(this.writeU8(208),this.writeI8(e)):e>=-32768?(this.writeU8(209),this.writeI16(e)):e>=-2147483648?(this.writeU8(210),this.writeI32(e)):(this.writeU8(211),this.writeI64(e)):this.forceFloat32?(this.writeU8(202),this.writeF32(e)):(this.writeU8(203),this.writeF64(e))},e.prototype.writeStringHeader=function(e){if(e<32)this.writeU8(160+e);else if(e<256)this.writeU8(217),this.writeU8(e);else if(e<65536)this.writeU8(218),this.writeU16(e);else{if(!(e<4294967296))throw new Error("Too long string: ".concat(e," bytes in UTF-8"));this.writeU8(219),this.writeU32(e)}},e.prototype.encodeString=function(e){if(e.length>sr){var t=or(e);this.ensureBufferSizeToWrite(5+t),this.writeStringHeader(t),ar(e,this.bytes,this.pos),this.pos+=t}else t=or(e),this.ensureBufferSizeToWrite(5+t),this.writeStringHeader(t),function(e,t,n){for(var r=e.length,o=n,i=0;i=55296&&s<=56319&&i>18&7|240,t[o++]=s>>12&63|128,t[o++]=s>>6&63|128):(t[o++]=s>>12&15|224,t[o++]=s>>6&63|128)}else t[o++]=s>>6&31|192;t[o++]=63&s|128}else t[o++]=s}}(e,this.bytes,this.pos),this.pos+=t},e.prototype.encodeObject=function(e,t){var n=this.extensionCodec.tryToEncode(e,this.context);if(null!=n)this.encodeExtension(n);else if(Array.isArray(e))this.encodeArray(e,t);else if(ArrayBuffer.isView(e))this.encodeBinary(e);else{if("object"!=typeof e)throw new Error("Unrecognized object: ".concat(Object.prototype.toString.apply(e)));this.encodeMap(e,t)}},e.prototype.encodeBinary=function(e){var t=e.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else{if(!(t<4294967296))throw new Error("Too large binary: ".concat(t));this.writeU8(198),this.writeU32(t)}var n=yr(e);this.writeU8a(n)},e.prototype.encodeArray=function(e,t){var n=e.length;if(n<16)this.writeU8(144+n);else if(n<65536)this.writeU8(220),this.writeU16(n);else{if(!(n<4294967296))throw new Error("Too large array: ".concat(n));this.writeU8(221),this.writeU32(n)}for(var r=0,o=e;r0&&e<=this.maxKeyLength},e.prototype.find=function(e,t,n){e:for(var r=0,o=this.caches[n-1];r=this.maxLengthPerKey?n[Math.random()*n.length|0]=r:n.push(r)},e.prototype.decode=function(e,t,n){var r=this.find(e,t,n);if(null!=r)return this.hit++,r;this.miss++;var o=cr(e,t,n),i=Uint8Array.prototype.slice.call(e,t,t+n);return this.store(i,o),o},e}(),_r=function(e,t){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=e},e.prototype.createExtraByteError=function(e){var t=this.view,n=this.pos;return new RangeError("Extra ".concat(t.byteLength-n," of ").concat(t.byteLength," byte(s) found at buffer[").concat(e,"]"))},e.prototype.decode=function(e){this.reinitializeState(),this.setBuffer(e);var t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t},e.prototype.decodeMulti=function(e){return _r(this,function(t){switch(t.label){case 0:this.reinitializeState(),this.setBuffer(e),t.label=1;case 1:return this.hasRemaining(1)?[4,this.doDecodeSync()]:[3,3];case 2:return t.sent(),[3,1];case 3:return[2]}})},e.prototype.decodeAsync=function(e){var t,n,r,o,i,s,a;return i=this,a=function(){var i,s,a,c,l,h,d,u;return _r(this,function(p){switch(p.label){case 0:i=!1,p.label=1;case 1:p.trys.push([1,6,7,12]),t=Cr(e),p.label=2;case 2:return[4,t.next()];case 3:if((n=p.sent()).done)return[3,5];if(a=n.value,i)throw this.createExtraByteError(this.totalPos);this.appendBuffer(a);try{s=this.doDecodeSync(),i=!0}catch(e){if(!(e instanceof Rr))throw e}this.totalPos+=this.pos,p.label=4;case 4:return[3,2];case 5:return[3,12];case 6:return c=p.sent(),r={error:c},[3,12];case 7:return p.trys.push([7,,10,11]),n&&!n.done&&(o=t.return)?[4,o.call(t)]:[3,9];case 8:p.sent(),p.label=9;case 9:return[3,11];case 10:if(r)throw r.error;return[7];case 11:return[7];case 12:if(i){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return[2,s]}throw h=(l=this).headByte,d=l.pos,u=l.totalPos,new RangeError("Insufficient data in parsing ".concat(br(h)," at ").concat(u," (").concat(d," in the current buffer)"))}})},new((s=void 0)||(s=Promise))(function(e,t){function n(e){try{o(a.next(e))}catch(e){t(e)}}function r(e){try{o(a.throw(e))}catch(e){t(e)}}function o(t){var o;t.done?e(t.value):(o=t.value,o instanceof s?o:new s(function(e){e(o)})).then(n,r)}o((a=a.apply(i,[])).next())})},e.prototype.decodeArrayStream=function(e){return this.decodeMultiAsync(e,!0)},e.prototype.decodeStream=function(e){return this.decodeMultiAsync(e,!1)},e.prototype.decodeMultiAsync=function(e,t){return function(n,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,i=function(){var n,r,o,i,s,a,c,l,h;return _r(this,function(d){switch(d.label){case 0:n=t,r=-1,d.label=1;case 1:d.trys.push([1,13,14,19]),o=Cr(e),d.label=2;case 2:return[4,Sr(o.next())];case 3:if((i=d.sent()).done)return[3,12];if(s=i.value,t&&0===r)throw this.createExtraByteError(this.totalPos);this.appendBuffer(s),n&&(r=this.readArraySize(),n=!1,this.complete()),d.label=4;case 4:d.trys.push([4,9,,10]),d.label=5;case 5:return[4,Sr(this.doDecodeSync())];case 6:return[4,d.sent()];case 7:return d.sent(),0===--r?[3,8]:[3,5];case 8:return[3,10];case 9:if(!((a=d.sent())instanceof Rr))throw a;return[3,10];case 10:this.totalPos+=this.pos,d.label=11;case 11:return[3,2];case 12:return[3,19];case 13:return c=d.sent(),l={error:c},[3,19];case 14:return d.trys.push([14,,17,18]),i&&!i.done&&(h=o.return)?[4,Sr(h.call(o))]:[3,16];case 15:d.sent(),d.label=16;case 16:return[3,18];case 17:if(l)throw l.error;return[7];case 18:return[7];case 19:return[2]}})}.apply(n,r||[]),s=[];return o={},a("next"),a("throw"),a("return"),o[Symbol.asyncIterator]=function(){return this},o;function a(e){i[e]&&(o[e]=function(t){return new Promise(function(n,r){s.push([e,t,n,r])>1||c(e,t)})})}function c(e,t){try{(n=i[e](t)).value instanceof Sr?Promise.resolve(n.value.v).then(l,h):d(s[0][2],n)}catch(e){d(s[0][3],e)}var n}function l(e){c("next",e)}function h(e){c("throw",e)}function d(e,t){e(t),s.shift(),s.length&&c(s[0][0],s[0][1])}}(this,arguments)},e.prototype.doDecodeSync=function(){e:for(;;){var e=this.readHeadByte(),t=void 0;if(e>=224)t=e-256;else if(e<192)if(e<128)t=e;else if(e<144){if(0!=(r=e-128)){this.pushMapState(r),this.complete();continue e}t={}}else if(e<160){if(0!=(r=e-144)){this.pushArrayState(r),this.complete();continue e}t=[]}else{var n=e-160;t=this.decodeUtf8String(n,0)}else if(192===e)t=null;else if(194===e)t=!1;else if(195===e)t=!0;else if(202===e)t=this.readF32();else if(203===e)t=this.readF64();else if(204===e)t=this.readU8();else if(205===e)t=this.readU16();else if(206===e)t=this.readU32();else if(207===e)t=this.readU64();else if(208===e)t=this.readI8();else if(209===e)t=this.readI16();else if(210===e)t=this.readI32();else if(211===e)t=this.readI64();else if(217===e)n=this.lookU8(),t=this.decodeUtf8String(n,1);else if(218===e)n=this.lookU16(),t=this.decodeUtf8String(n,2);else if(219===e)n=this.lookU32(),t=this.decodeUtf8String(n,4);else if(220===e){if(0!==(r=this.readU16())){this.pushArrayState(r),this.complete();continue e}t=[]}else if(221===e){if(0!==(r=this.readU32())){this.pushArrayState(r),this.complete();continue e}t=[]}else if(222===e){if(0!==(r=this.readU16())){this.pushMapState(r),this.complete();continue e}t={}}else if(223===e){if(0!==(r=this.readU32())){this.pushMapState(r),this.complete();continue e}t={}}else if(196===e){var r=this.lookU8();t=this.decodeBinary(r,1)}else if(197===e)r=this.lookU16(),t=this.decodeBinary(r,2);else if(198===e)r=this.lookU32(),t=this.decodeBinary(r,4);else if(212===e)t=this.decodeExtension(1,0);else if(213===e)t=this.decodeExtension(2,0);else if(214===e)t=this.decodeExtension(4,0);else if(215===e)t=this.decodeExtension(8,0);else if(216===e)t=this.decodeExtension(16,0);else if(199===e)r=this.lookU8(),t=this.decodeExtension(r,1);else if(200===e)r=this.lookU16(),t=this.decodeExtension(r,2);else{if(201!==e)throw new fr("Unrecognized type byte: ".concat(br(e)));r=this.lookU32(),t=this.decodeExtension(r,4)}this.complete();for(var o=this.stack;o.length>0;){var i=o[o.length-1];if(0===i.type){if(i.array[i.position]=t,i.position++,i.position!==i.size)continue e;o.pop(),t=i.array}else{if(1===i.type){if(!Er(t))throw new fr("The type of key must be string or number but "+typeof t);if("__proto__"===t)throw new fr("The key __proto__ is not allowed");i.key=t,i.type=2;continue e}if(i.map[i.key]=t,i.readCount++,i.readCount!==i.size){i.key=null,i.type=1;continue e}o.pop(),t=i.map}}return t}},e.prototype.readHeadByte=function(){return-1===this.headByte&&(this.headByte=this.readU8()),this.headByte},e.prototype.complete=function(){this.headByte=-1},e.prototype.readArraySize=function(){var e=this.readHeadByte();switch(e){case 220:return this.readU16();case 221:return this.readU32();default:if(e<160)return e-144;throw new fr("Unrecognized array type byte: ".concat(br(e)))}},e.prototype.pushMapState=function(e){if(e>this.maxMapLength)throw new fr("Max length exceeded: map length (".concat(e,") > maxMapLengthLength (").concat(this.maxMapLength,")"));this.stack.push({type:1,size:e,key:null,readCount:0,map:{}})},e.prototype.pushArrayState=function(e){if(e>this.maxArrayLength)throw new fr("Max length exceeded: array length (".concat(e,") > maxArrayLength (").concat(this.maxArrayLength,")"));this.stack.push({type:0,size:e,array:new Array(e),position:0})},e.prototype.decodeUtf8String=function(e,t){var n;if(e>this.maxStrLength)throw new fr("Max length exceeded: UTF-8 byte length (".concat(e,") > maxStrLength (").concat(this.maxStrLength,")"));if(this.bytes.byteLengthdr?function(e,t,n){var r=e.subarray(t,t+n);return hr.decode(r)}(this.bytes,o,e):cr(this.bytes,o,e),this.pos+=t+e,r},e.prototype.stateIsMapKey=function(){return this.stack.length>0&&1===this.stack[this.stack.length-1].type},e.prototype.decodeBinary=function(e,t){if(e>this.maxBinLength)throw new fr("Max length exceeded: bin length (".concat(e,") > maxBinLength (").concat(this.maxBinLength,")"));if(!this.hasRemaining(e+t))throw Tr;var n=this.pos+t,r=this.bytes.subarray(n,n+e);return this.pos+=t+e,r},e.prototype.decodeExtension=function(e,t){if(e>this.maxExtLength)throw new fr("Max length exceeded: ext length (".concat(e,") > maxExtLength (").concat(this.maxExtLength,")"));var n=this.view.getInt8(this.pos+t),r=this.decodeBinary(e,t+1);return this.extensionCodec.decode(r,n,this.context)},e.prototype.lookU8=function(){return this.view.getUint8(this.pos)},e.prototype.lookU16=function(){return this.view.getUint16(this.pos)},e.prototype.lookU32=function(){return this.view.getUint32(this.pos)},e.prototype.readU8=function(){var e=this.view.getUint8(this.pos);return this.pos++,e},e.prototype.readI8=function(){var e=this.view.getInt8(this.pos);return this.pos++,e},e.prototype.readU16=function(){var e=this.view.getUint16(this.pos);return this.pos+=2,e},e.prototype.readI16=function(){var e=this.view.getInt16(this.pos);return this.pos+=2,e},e.prototype.readU32=function(){var e=this.view.getUint32(this.pos);return this.pos+=4,e},e.prototype.readI32=function(){var e=this.view.getInt32(this.pos);return this.pos+=4,e},e.prototype.readU64=function(){var e,t,n=(e=this.view,t=this.pos,4294967296*e.getUint32(t)+e.getUint32(t+4));return this.pos+=8,n},e.prototype.readI64=function(){var e=nr(this.view,this.pos);return this.pos+=8,e},e.prototype.readF32=function(){var e=this.view.getFloat32(this.pos);return this.pos+=4,e},e.prototype.readF64=function(){var e=this.view.getFloat64(this.pos);return this.pos+=8,e},e}();class Nr{static write(e){let t=e.byteLength||e.length;const n=[];do{let e=127&t;t>>=7,t>0&&(e|=128),n.push(e)}while(t>0);t=e.byteLength||e.length;const r=new Uint8Array(n.length+t);return r.set(n,0),r.set(e,n.length),r.buffer}static parse(e){const t=[],n=new Uint8Array(e),r=[0,7,14,21,28];for(let o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+s+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+s,o+s+a):n.subarray(o+s,o+s+a)),o=o+s+a}return t}}const xr=new Uint8Array([145,dn.Ping]);class Mr{constructor(e){this.name="messagepack",this.version=2,this.transferFormat=Fn.Binary,this._errorResult=1,this._voidResult=2,this._nonVoidResult=3,e=e||{},this._encoder=new vr(e.extensionCodec,e.context,e.maxDepth,e.initialBufferSize,e.sortKeys,e.forceFloat32,e.ignoreUndefined,e.forceIntegerToFloat),this._decoder=new Dr(e.extensionCodec,e.context,e.maxStrLength,e.maxBinLength,e.maxArrayLength,e.maxMapLength,e.maxExtLength)}parseMessages(e,t){if(!(n=e)||"undefined"==typeof ArrayBuffer||!(n instanceof ArrayBuffer||n.constructor&&"ArrayBuffer"===n.constructor.name))throw new Error("Invalid input for MessagePack hub protocol. Expected an ArrayBuffer.");var n;null===t&&(t=pn.instance);const r=Nr.parse(e),o=[];for(const e of r){const n=this._parseMessage(e,t);n&&o.push(n)}return o}writeMessage(e){switch(e.type){case dn.Invocation:return this._writeInvocation(e);case dn.StreamInvocation:return this._writeStreamInvocation(e);case dn.StreamItem:return this._writeStreamItem(e);case dn.Completion:return this._writeCompletion(e);case dn.Ping:return Nr.write(xr);case dn.CancelInvocation:return this._writeCancelInvocation(e);case dn.Close:return this._writeClose();case dn.Ack:return this._writeAck(e);case dn.Sequence:return this._writeSequence(e);default:throw new Error("Invalid message type.")}}_parseMessage(e,t){if(0===e.length)throw new Error("Invalid payload.");const n=this._decoder.decode(e);if(0===n.length||!(n instanceof Array))throw new Error("Invalid payload.");const r=n[0];switch(r){case dn.Invocation:return this._createInvocationMessage(this._readHeaders(n),n);case dn.StreamItem:return this._createStreamItemMessage(this._readHeaders(n),n);case dn.Completion:return this._createCompletionMessage(this._readHeaders(n),n);case dn.Ping:return this._createPingMessage(n);case dn.Close:return this._createCloseMessage(n);case dn.Ack:return this._createAckMessage(n);case dn.Sequence:return this._createSequenceMessage(n);default:return t.log(hn.Information,"Unknown message type '"+r+"' ignored."),null}}_createCloseMessage(e){if(e.length<2)throw new Error("Invalid payload for Close message.");return{allowReconnect:e.length>=3?e[2]:void 0,error:e[1],type:dn.Close}}_createPingMessage(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:dn.Ping}}_createInvocationMessage(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");const n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:dn.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:dn.Invocation}}_createStreamItemMessage(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:dn.StreamItem}}_createCompletionMessage(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");const n=t[3];if(n!==this._voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");let r,o;switch(n){case this._errorResult:r=t[4];break;case this._nonVoidResult:o=t[4]}return{error:r,headers:e,invocationId:t[2],result:o,type:dn.Completion}}_createAckMessage(e){if(e.length<1)throw new Error("Invalid payload for Ack message.");return{sequenceId:e[1],type:dn.Ack}}_createSequenceMessage(e){if(e.length<1)throw new Error("Invalid payload for Sequence message.");return{sequenceId:e[1],type:dn.Sequence}}_writeInvocation(e){let t;return t=e.streamIds?this._encoder.encode([dn.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):this._encoder.encode([dn.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),Nr.write(t.slice())}_writeStreamInvocation(e){let t;return t=e.streamIds?this._encoder.encode([dn.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):this._encoder.encode([dn.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),Nr.write(t.slice())}_writeStreamItem(e){const t=this._encoder.encode([dn.StreamItem,e.headers||{},e.invocationId,e.item]);return Nr.write(t.slice())}_writeCompletion(e){const t=e.error?this._errorResult:void 0!==e.result?this._nonVoidResult:this._voidResult;let n;switch(t){case this._errorResult:n=this._encoder.encode([dn.Completion,e.headers||{},e.invocationId,t,e.error]);break;case this._voidResult:n=this._encoder.encode([dn.Completion,e.headers||{},e.invocationId,t]);break;case this._nonVoidResult:n=this._encoder.encode([dn.Completion,e.headers||{},e.invocationId,t,e.result])}return Nr.write(n.slice())}_writeCancelInvocation(e){const t=this._encoder.encode([dn.CancelInvocation,e.headers||{},e.invocationId]);return Nr.write(t.slice())}_writeClose(){const e=this._encoder.encode([dn.Close,null]);return Nr.write(e.slice())}_writeAck(e){const t=this._encoder.encode([dn.Ack,e.sequenceId]);return Nr.write(t.slice())}_writeSequence(e){const t=this._encoder.encode([dn.Sequence,e.sequenceId]);return Nr.write(t.slice())}_readHeaders(e){const t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t}}const Pr="function"==typeof TextDecoder?new TextDecoder("utf-8"):null,Lr=Pr?Pr.decode.bind(Pr):function(e){let t=0;const n=e.length,r=[],o=[];for(;t65535&&(o-=65536,r.push(o>>>10&1023|55296),o=56320|1023&o),r.push(o)}}else r.push(n);r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")},Ur=Math.pow(2,32),Br=Math.pow(2,21)-1;function Or(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function Fr(e,t){return e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24>>>0)}function $r(e,t){const n=Fr(e,t+4);if(n>Br)throw new Error(`Cannot read uint64 with high order part ${n}, because the result would exceed Number.MAX_SAFE_INTEGER.`);return n*Ur+Fr(e,t)}class Hr{constructor(e){this.batchData=e;const t=new qr(e);this.arrayRangeReader=new Jr(e),this.arrayBuilderSegmentReader=new Vr(e),this.diffReader=new jr(e),this.editReader=new Wr(e,t),this.frameReader=new zr(e,t)}updatedComponents(){return Or(this.batchData,this.batchData.length-20)}referenceFrames(){return Or(this.batchData,this.batchData.length-16)}disposedComponentIds(){return Or(this.batchData,this.batchData.length-12)}disposedEventHandlerIds(){return Or(this.batchData,this.batchData.length-8)}updatedComponentsEntry(e,t){const n=e+4*t;return Or(this.batchData,n)}referenceFramesEntry(e,t){return e+20*t}disposedComponentIdsEntry(e,t){const n=e+4*t;return Or(this.batchData,n)}disposedEventHandlerIdsEntry(e,t){const n=e+8*t;return $r(this.batchData,n)}}class jr{constructor(e){this.batchDataUint8=e}componentId(e){return Or(this.batchDataUint8,e)}edits(e){return e+4}editsEntry(e,t){return e+16*t}}class Wr{constructor(e,t){this.batchDataUint8=e,this.stringReader=t}editType(e){return Or(this.batchDataUint8,e)}siblingIndex(e){return Or(this.batchDataUint8,e+4)}newTreeIndex(e){return Or(this.batchDataUint8,e+8)}moveToSiblingIndex(e){return Or(this.batchDataUint8,e+8)}removedAttributeName(e){const t=Or(this.batchDataUint8,e+12);return this.stringReader.readString(t)}}class zr{constructor(e,t){this.batchDataUint8=e,this.stringReader=t}frameType(e){return Or(this.batchDataUint8,e)}subtreeLength(e){return Or(this.batchDataUint8,e+4)}elementReferenceCaptureId(e){const t=Or(this.batchDataUint8,e+4);return this.stringReader.readString(t)}componentId(e){return Or(this.batchDataUint8,e+8)}elementName(e){const t=Or(this.batchDataUint8,e+8);return this.stringReader.readString(t)}textContent(e){const t=Or(this.batchDataUint8,e+4);return this.stringReader.readString(t)}markupContent(e){const t=Or(this.batchDataUint8,e+4);return this.stringReader.readString(t)}attributeName(e){const t=Or(this.batchDataUint8,e+4);return this.stringReader.readString(t)}attributeValue(e){const t=Or(this.batchDataUint8,e+8);return this.stringReader.readString(t)}attributeEventHandlerId(e){return $r(this.batchDataUint8,e+12)}}class qr{constructor(e){this.batchDataUint8=e,this.stringTableStartIndex=Or(e,e.length-4)}readString(e){if(-1===e)return null;{const n=Or(this.batchDataUint8,this.stringTableStartIndex+4*e),r=function(e,t){let n=0,r=0;for(let o=0;o<4;o++){const i=e[t+o];if(n|=(127&i)<this.nextBatchId)return this.fatalError?(this.logger.log(Xt.Debug,`Received a new batch ${e} but errored out on a previous batch ${this.nextBatchId-1}`),void await n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())):void this.logger.log(Xt.Debug,`Waiting for batch ${this.nextBatchId}. Batch ${e} not processed.`);try{this.nextBatchId++,this.logger.log(Xt.Debug,`Applying batch ${e}.`),ot(Gn.Server,new Hr(t)),await this.completeBatch(n,e)}catch(t){throw this.fatalError=t.toString(),this.logger.log(Xt.Error,`There was an error applying batch ${e}.`),n.send("OnRenderCompleted",e,t.toString()),t}}getLastBatchid(){return this.nextBatchId-1}async completeBatch(e,t){try{await e.send("OnRenderCompleted",t,null)}catch{this.logger.log(Xt.Warning,`Failed to deliver completion notification for render '${t}'.`)}}}let Xr=!1;function Gr(){const e=document.querySelector("#blazor-error-ui");e&&(e.style.display="block"),Xr||(Xr=!0,document.querySelectorAll("#blazor-error-ui .reload").forEach(e=>{e.onclick=function(e){location.reload(),e.preventDefault()}}),document.querySelectorAll("#blazor-error-ui .dismiss").forEach(e=>{e.onclick=function(e){const t=document.querySelector("#blazor-error-ui");t&&(t.style.display="none"),e.preventDefault()}}))}class Yr{constructor(t,n,r,o){this._renderingFailed=!1,this._disposed=!1,this._pausingState=new Qr("pausing",!1,!1),this._resumingState=new Qr("resuming",!1,!1),this._disconnectingState=new Qr("disconnecting"),this._isFirstRender=!0,this._circuitId=void 0,this._applicationState=n,this._componentManager=t,this._options=r,this._logger=o,this._renderQueue=new Kr(this._logger),this._dispatcher=e.attachDispatcher(this)}start(){if(this.isDisposedOrDisposing())throw new Error("Cannot start a disposed circuit.");return this._startPromise||(this._startPromise=this.startCore()),this._startPromise}updateRootComponents(e,t){return this._isFirstRender?(this._isFirstRender=!1,this._connection?.send("UpdateRootComponents",e,this._applicationState)):this._connection?.send("UpdateRootComponents",e,t)}async startCore(){if(this._connection=await this.startConnection(),this._connection.state!==un.Connected)return!1;const e=JSON.stringify(this._componentManager.initialComponents.map(e=>oe(e)));if(this._circuitId=await this._connection.invoke("StartCircuit",Et.getBaseURI(),Et.getLocationHref(),e,this._applicationState||""),!this._circuitId)return!1;for(const e of this._options.circuitHandlers)e.onCircuitOpened&&e.onCircuitOpened();return!0}async startConnection(){const e=new Mr;e.name="blazorpack";const t=(new Xn).withUrl("_blazor").withHubProtocol(e);this._options.configureSignalR(t);const n=t.build();n.on("JS.AttachComponent",(e,t)=>nt(Gn.Server,this.resolveElement(t),e,!1)),n.on("JS.BeginInvokeJS",this._dispatcher.beginInvokeJSFromDotNet.bind(this._dispatcher)),n.on("JS.EndInvokeDotNet",this._dispatcher.endInvokeDotNetFromJS.bind(this._dispatcher)),n.on("JS.ReceiveByteArray",this._dispatcher.receiveByteArray.bind(this._dispatcher)),n.on("JS.SavePersistedState",(e,t,n)=>{if(!this._circuitId)throw new Error("Circuit host not initialized.");if(e!==this._circuitId)throw new Error(`Received persisted state for circuit ID '${e}', but the current circuit ID is '${this._circuitId}'.`);return this._persistedCircuitState={components:t,applicationState:n},!0}),n.on("JS.BeginTransmitStream",e=>{const t=new ReadableStream({start:t=>{n.stream("SendDotNetStreamToJS",e).subscribe({next:e=>t.enqueue(e),complete:()=>t.close(),error:e=>t.error(e)})}});this._dispatcher.supplyDotNetStream(e,t)}),n.on("JS.RenderBatch",async(e,t)=>{this._logger.log(hn.Debug,`Received render batch with id ${e} and ${t.byteLength} bytes.`),await this._renderQueue.processBatch(e,t,this._connection),this._componentManager.onAfterRenderBatch?.(Gn.Server)}),n.on("JS.EndUpdateRootComponents",e=>{this._componentManager.onAfterUpdateRootComponents?.(e)}),n.on("JS.EndLocationChanging",Qt._internal.navigationManager.endLocationChanging),n.onclose(e=>{this._interopMethodsForReconnection=function(e){const t=I.get(e);if(!t)throw new Error(`Interop methods are not registered for renderer ${e}`);return I.delete(e),t}(Gn.Server);const t=this._pausingState.isInprogress();t||this._pausingState.transitionTo(!0),this._disposed||this._renderingFailed||t||this._options.reconnectionHandler.onConnectionDown(this._options.reconnectionOptions,e)}),n.on("JS.Error",e=>{this._renderingFailed=!0,this.unhandledError(e),Gr()});try{await n.start()}catch(e){if(this.unhandledError(e),"FailedToNegotiateWithServerError"===e.errorType)throw e;Gr(),e.innerErrors&&(e.innerErrors.some(e=>"UnsupportedTransportError"===e.errorType&&e.transport===On.WebSockets)?this._logger.log(hn.Error,"Unable to connect, please ensure you are using an updated browser that supports WebSockets."):e.innerErrors.some(e=>"FailedToStartTransportError"===e.errorType&&e.transport===On.WebSockets)?this._logger.log(hn.Error,"Unable to connect, please ensure WebSockets are available. A VPN or proxy may be blocking the connection."):e.innerErrors.some(e=>"DisabledTransportError"===e.errorType&&e.transport===On.LongPolling)&&this._logger.log(hn.Error,"Unable to initiate a SignalR connection to the server. This might be because the server is not configured to support WebSockets. For additional details, visit https://aka.ms/blazor-server-websockets-error."))}return n.connection?.features?.inherentKeepAlive&&this._logger.log(hn.Warning,"Failed to connect via WebSockets, using the Long Polling fallback transport. This may be due to a VPN or proxy blocking the connection. To troubleshoot this, visit https://aka.ms/blazor-server-using-fallback-long-polling."),n}async disconnect(){if(!this._circuitId)throw new Error("Circuit host not initialized.");if(this._disconnectingState.isInprogress())return this._logger.log(hn.Trace,"Waiting for the circuit to finish disconnecting..."),this._disconnectingState.currentProgress();try{this._disconnectingState.reset();const e=this._disconnectingState.currentProgress();return this._logger.log(hn.Trace,"Disconnecting the circuit..."),await this._connection.stop(),this._disconnectingState.complete(),e}catch(e){throw this._logger.log(hn.Error,`Failed to disconnect the circuit: ${e}`),this._disconnectingState.fail(e),e}}async reconnect(){if(!this._circuitId)throw new Error("Circuit host not initialized.");return this._connection.state===un.Connected||(this._connection=await this.startConnection(),this._interopMethodsForReconnection&&(T(Gn.Server,this._interopMethodsForReconnection),this._interopMethodsForReconnection=void 0),!!await this._connection.invoke("ConnectCircuit",this._circuitId)&&(this._options.reconnectionHandler.onConnectionUp(),!0))}async pause(e){if(!this._circuitId)return this._logger.log(hn.Error,"Circuit host not initialized."),!1;if(this._connection.state!==un.Connected)return this._logger.log(hn.Trace,"Pause can only be triggered on connected circuits."),!1;if(this._resumingState.isInprogress())return this._logger.log(hn.Trace,"Circuit is currently resuming..."),!1;if(this._pausingState.isInprogress())return this._logger.log(hn.Trace,"Waiting for the circuit to finish pausing..."),this._pausingState.currentProgress();if(!0===this._pausingState.lastValue())return this._logger.log(hn.Trace,"Circuit is already paused."),!0;this._pausingState.reset();const t=this._pausingState.currentProgress();try{this._logger.log(hn.Trace,"Pausing the circuit..."),this._options.reconnectionHandler?.onConnectionDown(this._options.reconnectionOptions,void 0,!0,e);const t=await this._connection.invoke("PauseCircuit");this._pausingState.complete(t)}catch(e){this._logger.log(hn.Error,`Failed to pause the circuit: ${e}`),this._pausingState.fail(e)}return await this.disconnect(),t}async resume(){if(!this._circuitId)throw this._logger.log(hn.Error,"Circuit host not initialized."),new Error("Circuit host not initialized.");if(this._disconnectingState.isInprogress()&&(this._logger.log(hn.Trace,"Circuit is disconnecting, cannot resume."),await this._disconnectingState.currentProgress()),this._pausingState.isInprogress())return this._logger.log(hn.Trace,"Waiting for the circuit to finish pausing..."),!1;if(!this._pausingState.lastValue())return this._logger.log(hn.Trace,"Circuit is not paused."),!1;if(this._connection.state!==un.Connected&&(this._logger.log(hn.Trace,"Reestablishing SignalR connection..."),this._connection=await this.startConnection()),this._resumingState.isInprogress())return this._logger.log(hn.Trace,"Waiting for the circuit to finish resuming..."),this._resumingState.currentProgress();this._resumingState.reset();const e=this._resumingState.currentProgress();try{for(const e of this._options.circuitHandlers)e.onCircuitClosed&&e.onCircuitClosed();const t=this._persistedCircuitState;this._persistedCircuitState=void 0;const n=await this._connection.invoke("ResumeCircuit",this._circuitId,Et.getBaseURI(),Et.getLocationHref(),t?.components??"[]",t?.applicationState??"");if(!n)return this._resumingState.complete(!1),e;this._pausingState.transitionTo(!1),this._resumingState.complete(!0),this._circuitId=n,this._renderQueue=new Kr(this._logger);for(const e of this._options.circuitHandlers)e.onCircuitOpened&&e.onCircuitOpened();return this._options.reconnectionHandler.onConnectionUp(),this._componentManager.onComponentReload?.(Gn.Server),e}catch(t){return this._logger.log(hn.Error,`Failed to resume the circuit: ${t}`),this._resumingState.fail(t),e}}beginInvokeDotNetFromJS(e,t,n,r,o){this.throwIfDispatchingWhenDisposed(),this._connection.send("BeginInvokeDotNetFromJS",e?e.toString():null,t,n,r||0,o)}endInvokeJSFromDotNet(e,t,n){this.throwIfDispatchingWhenDisposed(),this._connection.send("EndInvokeJSFromDotNet",e,t,n)}sendByteArray(e,t){this.throwIfDispatchingWhenDisposed(),this._connection.send("ReceiveByteArray",e,t)}throwIfDispatchingWhenDisposed(){if(this._disposed)throw new Error("The circuit associated with this dispatcher is no longer available.")}sendLocationChanged(e,t,n){return this._connection.send("OnLocationChanged",e,t,n)}sendLocationChanging(e,t,n,r){return this._connection.send("OnLocationChanging",e,t,n,r)}sendJsDataStream(e,t,n){return function(e,t,n,r){setTimeout(async()=>{let o=5,i=(new Date).valueOf();try{const s=t instanceof Blob?t.size:t.byteLength;let a=0,c=0;for(;a1)await e.send("ReceiveJSDataChunk",n,c,h,null);else{if(!await e.invoke("ReceiveJSDataChunk",n,c,h,null))break;const t=(new Date).valueOf(),r=t-i;i=t,o=Math.max(1,Math.round(500/Math.max(1,r)))}a+=l,c++}}catch(t){await e.send("ReceiveJSDataChunk",n,-1,null,t.toString())}},0)}(this._connection,e,t,n)}resolveElement(e){const t=_(e);if(t)return he(t,!0);const n=Number.parseInt(e);if(!Number.isNaN(n))return le(this._componentManager.resolveRootComponent(n));throw new Error(`Invalid sequence number or identifier '${e}'.`)}getRootComponentManager(){return this._componentManager}unhandledError(e){this._logger.log(hn.Error,e),this.disconnect()}getDisconnectFormData(){const e=new FormData,t=this._circuitId;return e.append("circuitId",t),e}didRenderingFail(){return this._renderingFailed}isDisposedOrDisposing(){return void 0!==this._disposePromise}sendDisconnectBeacon(){if(this._disposed)return;const e=this.getDisconnectFormData();this._disposed=navigator.sendBeacon("_blazor/disconnect",e)}dispose(){return this._disposePromise||(this._disposePromise=this.disposeCore()),this._disposePromise}async disposeCore(){if(!this._startPromise)return void(this._disposed=!0);await this._startPromise,this._disposed=!0,this._connection?.stop();const e=this.getDisconnectFormData();fetch("_blazor/disconnect",{method:"POST",body:e});for(const e of this._options.circuitHandlers)e.onCircuitClosed&&e.onCircuitClosed()}}class Qr{constructor(e,t,n){this._stateName=e,this._resetValue=n,this._lastValue=t}reset(){if(this._promise)throw new Error(`Circuit state ${this._stateName} is already in progress`);const{promise:e,resolve:t,reject:n}=Promise.withResolvers();this._promise=e,this._resolve=t,this._reject=n,this._lastValue=this._resetValue}complete(e){if(!this._resolve)throw new Error(`Circuit state ${this._stateName} not initialized`);const t=this._resolve;this._lastValue=e,this._promise=void 0,this._resolve=void 0,this._reject=void 0,t(e)}fail(e){if(!this._reject)throw new Error(`Circuit state ${this._stateName} not initialized`);const t=this._reject;this._promise=void 0,this._resolve=void 0,this._reject=void 0,t(e)}isInprogress(){return!!this._promise}currentProgress(){if(!this.isInprogress())throw new Error(`Circuit state ${this._stateName} is not in progress`);return this._promise}transitionTo(e){if(this._promise)throw new Error(`Circuit state ${this._stateName} is in progress`);this._lastValue=e}lastValue(){return this._lastValue}}function Zr(e){const t={...eo,...e};return e&&e.reconnectionOptions&&(t.reconnectionOptions={...eo.reconnectionOptions,...e.reconnectionOptions}),t}const eo={configureSignalR:e=>{},logLevel:Xt.Warning,initializers:void 0,circuitHandlers:[],reconnectionOptions:{maxRetries:30,retryIntervalMilliseconds:function(e,t){return t&&e>=t?null:e<10?0:e<20?5e3:3e4},dialogId:"components-reconnect-modal"}};class to{static{this.ReconnectOverlayClassName="components-reconnect-overlay"}static{this.ReconnectDialogClassName="components-reconnect-dialog"}static{this.ReconnectVisibleClassName="components-reconnect-visible"}static{this.RejoiningAnimationClassName="components-rejoining-animation"}static{this.AnimationRippleCount=2}constructor(e,t,n){this.document=t,this.logger=n,this.reconnect=!0,this.remote=!1,this.style=this.document.createElement("style"),this.style.innerHTML=to.Css,this.overlay=this.document.createElement("div"),this.overlay.className=to.ReconnectOverlayClassName,this.host=this.document.createElement("div"),this.host.id=e;const r=this.host.attachShadow({mode:"open"});this.dialog=t.createElement("div"),this.dialog.className=to.ReconnectDialogClassName,r.appendChild(this.style),r.appendChild(this.overlay),this.rejoiningAnimation=t.createElement("div"),this.rejoiningAnimation.className=to.RejoiningAnimationClassName;for(let e=0;e{"visible"===this.document.visibilityState&&this.retry()}}show(e){this.document.contains(this.host)||this.document.body.appendChild(this.host),this.reconnect="reconnect"===e?.type,this.resumeButton.style.display="none",this.reloadButton.style.display="none",this.rejoiningAnimation.style.display="block",this.status.innerHTML="Rejoining the server...",this.host.style.display="block",this.overlay.classList.add(to.ReconnectVisibleClassName)}update(e){if(this.reconnect="reconnect"===e.type,this.reconnect){this.reloadButton.style.display="none",this.resumeButton.style.display="none";const{currentAttempt:t,secondsToNextAttempt:n}=e;if(1===t||0===n)this.status.innerHTML="Rejoining the server...";else{const e=1===n?"second":"seconds";this.status.innerHTML=`Rejoin failed... trying again in ${n} ${e}`}}else this.reloadButton.style.display="none",this.rejoiningAnimation.style.display="none",this.status.innerHTML="The session has been paused by the server.",this.resumeButton.style.display="block"}hide(){this.host.style.display="none",this.overlay.classList.remove(to.ReconnectVisibleClassName)}failed(){this.rejoiningAnimation.style.display="none",this.reconnect?(this.resumeButton.style.display="none",this.reloadButton.style.display="block",this.status.innerHTML="Failed to rejoin.
Please retry or reload the page.",this.document.addEventListener("visibilitychange",this.retryWhenDocumentBecomesVisible)):(this.status.innerHTML="Failed to resume the session.
Please retry or reload the page.",this.resumeButton.style.display="block",this.reloadButton.style.display="none")}rejected(){location.reload()}async retry(){this.document.removeEventListener("visibilitychange",this.retryWhenDocumentBecomesVisible),this.show();try{await Qt.reconnect()||await Qt.resumeCircuit()||this.rejected()}catch(e){this.logger.log(Xt.Error,e),this.failed()}}async resume(){try{await Qt.resumeCircuit()||this.rejected()}catch(e){this.logger.log(Xt.Error,e),this.failed()}}static{this.Css=`\n .${this.ReconnectOverlayClassName} {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000;\n display: none;\n overflow: hidden;\n animation: components-reconnect-fade-in;\n }\n\n .${this.ReconnectOverlayClassName}.${this.ReconnectVisibleClassName} {\n display: block;\n }\n\n .${this.ReconnectOverlayClassName}::before {\n content: '';\n background-color: rgba(0, 0, 0, 0.4);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n animation: components-reconnect-fadeInOpacity 0.5s ease-in-out;\n opacity: 1;\n }\n\n .${this.ReconnectOverlayClassName} p {\n margin: 0;\n text-align: center;\n }\n\n .${this.ReconnectOverlayClassName} button {\n border: 0;\n background-color: #6b9ed2;\n color: white;\n padding: 4px 24px;\n border-radius: 4px;\n }\n\n .${this.ReconnectOverlayClassName} button:hover {\n background-color: #3b6ea2;\n }\n\n .${this.ReconnectOverlayClassName} button:active {\n background-color: #6b9ed2;\n }\n\n .${this.ReconnectDialogClassName} {\n position: relative;\n background-color: white;\n width: 20rem;\n margin: 20vh auto;\n padding: 2rem;\n border-radius: 0.5rem;\n box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n opacity: 0;\n animation: components-reconnect-slideUp 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-fadeInOpacity 0.5s ease-out 0.3s;\n animation-fill-mode: forwards;\n z-index: 10001;\n }\n\n .${this.RejoiningAnimationClassName} {\n display: block;\n position: relative;\n width: 80px;\n height: 80px;\n }\n\n .${this.RejoiningAnimationClassName} div {\n position: absolute;\n border: 3px solid #0087ff;\n opacity: 1;\n border-radius: 50%;\n animation: ${this.RejoiningAnimationClassName} 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;\n }\n\n .${this.RejoiningAnimationClassName} div:nth-child(2) {\n animation-delay: -0.5s;\n }\n\n @keyframes ${this.RejoiningAnimationClassName} {\n 0% {\n top: 40px;\n left: 40px;\n width: 0;\n height: 0;\n opacity: 0;\n }\n\n 4.9% {\n top: 40px;\n left: 40px;\n width: 0;\n height: 0;\n opacity: 0;\n }\n\n 5% {\n top: 40px;\n left: 40px;\n width: 0;\n height: 0;\n opacity: 1;\n }\n\n 100% {\n top: 0px;\n left: 0px;\n width: 80px;\n height: 80px;\n opacity: 0;\n }\n }\n\n @keyframes components-reconnect-fadeInOpacity {\n 0% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n }\n\n @keyframes components-reconnect-slideUp {\n 0% {\n transform: translateY(30px) scale(0.95);\n }\n\n 100% {\n transform: translateY(0);\n }\n }\n `}}class no{static{this.ShowClassName="components-reconnect-show"}static{this.HideClassName="components-reconnect-hide"}static{this.RetryingClassName="components-reconnect-retrying"}static{this.FailedClassName="components-reconnect-failed"}static{this.PausedClassName="components-reconnect-paused"}static{this.ResumeFailedClassName="components-reconnect-resume-failed"}static{this.RejectedClassName="components-reconnect-rejected"}static{this.MaxRetriesId="components-reconnect-max-retries"}static{this.CurrentAttemptId="components-reconnect-current-attempt"}static{this.SecondsToNextAttemptId="components-seconds-to-next-attempt"}static{this.ReconnectStateChangedEventName="components-reconnect-state-changed"}constructor(e,t,n){if(this.dialog=e,this.document=t,this.reconnect=!0,this.remote=!1,this.document=t,void 0!==n){const e=this.document.getElementById(no.MaxRetriesId);e&&(e.innerText=n.toString())}}show(){this.removeClasses(),this.dialog.classList.add(no.ShowClassName),this.dispatchReconnectStateChangedEvent({state:"show"})}update(e){if(this.reconnect="reconnect"===e.type,"reconnect"===e.type){const{currentAttempt:t,secondsToNextAttempt:n}=e,r=this.document.getElementById(no.CurrentAttemptId);r&&(r.innerText=t.toString());const o=this.document.getElementById(no.SecondsToNextAttemptId);o&&(o.innerText=n.toString()),t>1&&n>0&&this.dialog.classList.add(no.RetryingClassName),this.dispatchReconnectStateChangedEvent({state:"retrying",currentAttempt:t,secondsToNextAttempt:n})}"pause"===e.type&&(this.remote=e.remote,this.dialog.classList.remove(no.ShowClassName,no.RetryingClassName),this.dialog.classList.add(no.PausedClassName),this.dispatchReconnectStateChangedEvent({state:"paused",remote:this.remote}))}hide(){this.removeClasses(),this.dialog.classList.add(no.HideClassName),this.dispatchReconnectStateChangedEvent({state:"hide"})}failed(){this.removeClasses(),this.reconnect?(this.dialog.classList.add(no.FailedClassName),this.dispatchReconnectStateChangedEvent({state:"failed"})):(this.dialog.classList.add(no.ResumeFailedClassName),this.dispatchReconnectStateChangedEvent({state:"resume-failed",remote:this.remote}))}rejected(){this.removeClasses(),this.dialog.classList.add(no.RejectedClassName),this.dispatchReconnectStateChangedEvent({state:"rejected"})}removeClasses(){this.dialog.classList.remove(no.ShowClassName,no.HideClassName,no.RetryingClassName,no.FailedClassName,no.RejectedClassName,no.PausedClassName,no.ResumeFailedClassName)}dispatchReconnectStateChangedEvent(e){const t=new CustomEvent(no.ReconnectStateChangedEventName,{detail:e});this.dialog.dispatchEvent(t)}}class ro{constructor(e,t,n,r){this._currentReconnectionProcess=null,this._logger=e,this._reconnectionDisplay=t,this._reconnectCallback=n||Qt.reconnect,this._resumeCallback=r||Qt.resumeCircuit}onConnectionDown(e,t,n,r){if(!this._reconnectionDisplay){const t=document.getElementById(e.dialogId);this._reconnectionDisplay=t?new no(t,document,e.maxRetries):new to(e.dialogId,document,this._logger)}this._currentReconnectionProcess||(this._currentReconnectionProcess=new oo(e,this._logger,this._reconnectCallback,this._resumeCallback,this._reconnectionDisplay,n,r))}onConnectionUp(){this._currentReconnectionProcess&&(this._currentReconnectionProcess.dispose(),this._currentReconnectionProcess=null)}}class oo{static{this.MaximumFirstRetryInterval=3e3}constructor(e,t,n,r,o,i,s=!1){this.logger=t,this.reconnectCallback=n,this.resumeCallback=r,this.isGracefulPause=i,this.isRemote=s,this.isDisposed=!1,this.reconnectDisplay=o;const a={type:i?"pause":"reconnect",remote:this.isRemote,currentAttempt:0,secondsToNextAttempt:0};this.reconnectDisplay.show(a),this.isGracefulPause?this.reconnectDisplay.update({type:"pause",remote:this.isRemote}):this.attemptPeriodicReconnection(e)}dispose(){this.isDisposed=!0,this.reconnectDisplay.hide()}async attemptPeriodicReconnection(e){for(let t=0;void 0===e.maxRetries||too.MaximumFirstRetryInterval?oo.MaximumFirstRetryInterval:e.retryIntervalMilliseconds;if(await this.runTimer(n,1e3,e=>{this.reconnectDisplay.update({type:"reconnect",currentAttempt:t+1,secondsToNextAttempt:Math.round(e/1e3)})}),this.isDisposed)break;try{if(!await this.reconnectCallback()){if(await this.resumeCallback())return;return void this.reconnectDisplay.rejected()}return}catch(e){this.logger.log(Xt.Error,e)}}this.reconnectDisplay.failed()}async runTimer(e,t,n){if(e<=0)return void n(0);let r,o,i=Date.now();n(e);const s=()=>{if(this.isDisposed)return void o();const a=Date.now(),c=a-i;i=a;const l=Math.max(1,Math.floor(c/t)),h=t*l;if((e-=h){"visible"===document.visibilityState&&(clearTimeout(r),n(0),o())};r=setTimeout(s,t),document.addEventListener("visibilitychange",a),await new Promise(e=>o=e),document.removeEventListener("visibilitychange",a)}}class io{constructor(e=!0,t,n,r=0){this.singleRuntime=e,this.logger=t,this.webRendererId=r,this.afterStartedCallbacks=[],n&&this.afterStartedCallbacks.push(...n)}async importInitializersAsync(e,t){await Promise.all(e.map(e=>async function(e,n){let r;var o;n.moduleExports||(o=n.name,r=new URL(o,document.baseURI).toString(),n.moduleExports=await import(r));const i=n.moduleExports;if(void 0!==i){if(e.singleRuntime){const{beforeStart:n,afterStarted:r,beforeWebAssemblyStart:o,afterWebAssemblyStarted:a,beforeServerStart:c,afterServerStarted:l}=i;let h=n;e.webRendererId===Gn.Server&&c&&(h=c),e.webRendererId===Gn.WebAssembly&&o&&(h=o);let d=r;return e.webRendererId===Gn.Server&&l&&(d=l),e.webRendererId===Gn.WebAssembly&&a&&(d=a),s(e,h,d,t)}return function(e,t,n){const o=n[0],{beforeStart:i,afterStarted:a,beforeWebStart:c,afterWebStarted:l,beforeWebAssemblyStart:h,afterWebAssemblyStarted:d,beforeServerStart:u,afterServerStarted:p}=t,f=!(c||l||h||d||u||p||!i&&!a),g=f&&o.enableClassicInitializers;if(f&&!o.enableClassicInitializers)e.logger?.log(Xt.Warning,`Initializer '${r}' will be ignored because multiple runtimes are available. Use 'before(Web|WebAssembly|Server)Start' and 'after(Web|WebAssembly|Server)Started' instead.`);else if(g)return s(e,i,a,n);if(function(e){e.webAssembly?e.webAssembly.initializers||(e.webAssembly.initializers={beforeStart:[],afterStarted:[]}):e.webAssembly={initializers:{beforeStart:[],afterStarted:[]}},e.circuit?e.circuit.initializers||(e.circuit.initializers={beforeStart:[],afterStarted:[]}):e.circuit={initializers:{beforeStart:[],afterStarted:[]}}}(o),h&&o.webAssembly.initializers.beforeStart.push(h),d&&o.webAssembly.initializers.afterStarted.push(d),u&&o.circuit.initializers.beforeStart.push(u),p&&o.circuit.initializers.afterStarted.push(p),l&&e.afterStartedCallbacks.push(l),c)return c(o)}(e,i,t)}function s(e,t,n,r){if(n&&e.afterStartedCallbacks.push(n),t)return t(...r)}}(this,e)))}async invokeAfterStartedCallbacks(e){const t=(n=this.webRendererId,R.get(n)?.[1]);var n;t&&await t,await Promise.all(this.afterStartedCallbacks.map(t=>t(e)))}}let so,ao,co,lo,ho,uo,po;function fo(e){if(void 0!==uo)throw new Error("Blazor Server has already started.");return uo=new Promise(go.bind(null,e)),uo}async function go(e,t,n){await so;const r=await async function(e){if(e.initializers)return await Promise.all(e.initializers.beforeStart.map(t=>t(e))),new io(!1,void 0,e.initializers.afterStarted,Gn.Server);const t=await fetch("_blazor/initializers",{method:"GET",credentials:"include",cache:"no-cache"}),n=(await t.json()).map(e=>({name:e})),r=new io(!0,void 0,void 0,Gn.Server);return await r.importInitializersAsync(n,[e]),r}(lo);if(ao=V(document)||"",ho=new Gt(lo.logLevel),co=new Yr(e,ao,lo,ho),M((e,t,n)=>{ho.log(Xt.Debug,`Dispatching event with handler id ${t}.`),n()}),ho.log(Xt.Information,"Starting up Blazor server-side application."),Qt.reconnect=async()=>!(co.didRenderingFail()||!await co.reconnect()&&(ho.log(Xt.Information,"Reconnection attempt to the circuit was rejected by the server. This may indicate that the associated state is no longer available on the server."),1)),Qt.pauseCircuit=async()=>!(co.didRenderingFail()||!await co.pause()&&(ho.log(Xt.Information,"Pause attempt to the circuit was rejected by the server. This may indicate that the associated state is no longer available on the server."),1)),Qt.resumeCircuit=async()=>!(co.didRenderingFail()||!await co.resume()&&(ho.log(Xt.Information,"Resume attempt to the circuit was rejected by the server. This may indicate that the associated state is no longer available on the server."),1)),Qt.defaultReconnectionHandler=new ro(ho),lo.reconnectionHandler=lo.reconnectionHandler||Qt.defaultReconnectionHandler,Qt._internal.navigationManager.listenForNavigationEvents(Gn.Server,(e,t,n)=>co.sendLocationChanged(e,t,n),(e,t,n,r)=>co.sendLocationChanging(e,t,n,r)),Qt._internal.forceCloseConnection=()=>co.disconnect(),Qt._internal.sendJSDataStream=(e,t,n)=>co.sendJsDataStream(e,t,n),!await co.start())return ho.log(Xt.Error,"Failed to start the circuit."),void t();const o=()=>{co.sendDisconnectBeacon()};Qt.disconnect=o,window.addEventListener("pagehide",o,{capture:!1,once:!0}),ho.log(Xt.Information,"Blazor server-side application started."),r.invokeAfterStartedCallbacks(Qt),t()}async function mo(){if(!uo)throw new Error("Cannot start the circuit until Blazor Server has started.");return!(!co||co.isDisposedOrDisposing())||(po?await po:(await uo,(!co||!co.didRenderingFail())&&(co&&co.isDisposedOrDisposing()&&(ao=V(document)||"",co=new Yr(co.getRootComponentManager(),ao,lo,ho)),po=co.start(),async function(e){await e,po===e&&(po=void 0)}(po),po)))}function yo(e,t){if(co&&!co.isDisposedOrDisposing())return co.updateRootComponents(e,t);!async function(e,t){await uo,await mo()&&co.updateRootComponents(e,t)}(e,t)}const vo=navigator,bo=vo.userAgentData&&vo.userAgentData.brands,wo=bo&&bo.length>0?bo.some(e=>"Google Chrome"===e.brand||"Microsoft Edge"===e.brand||"Chromium"===e.brand):window.chrome,_o=vo.userAgentData?.platform??navigator.platform;function Co(e){return 0!==e.debugLevel&&(wo||navigator.userAgent.includes("Firefox"))}let So,Eo,Io,ko,Ro=!0,To=null,Ao=null;const Do={load:function(e,t){return async function(e,t){const{dotnet:n}=await async function(e){if("undefined"==typeof WebAssembly||!WebAssembly.validate)throw new Error("This browser does not support WebAssembly.");if(e.loadBootResource){const t="dotnetjs",n=e.loadBootResource(t,"dotnet.js","_framework/dotnet.js","","js-module-dotnet");if("string"==typeof n){const e=new URL(n,document.baseURI).toString();return await import(e)}if(n)throw new Error(`For a ${t} resource, custom loaders must supply a URI string.`)}return await import("./dotnet.js")}(e),r=function(e,t){const n={maxParallelDownloads:1e6,enableDownloadRetry:!1};e.environment&&(n.applicationEnvironment=e.environment);const r={...window.Module||{},onConfigLoaded:async n=>{n.environmentVariables||(n.environmentVariables={}),"sharded"===n.globalizationMode&&(n.environmentVariables.__BLAZOR_SHARDED_ICU="1"),Qt._internal.getApplicationEnvironment=()=>n.applicationEnvironment,Qt._internal.getApplicationCulture=()=>n.applicationCulture,t?.(n),ko=await async function(e,t){if(e.initializers)return await Promise.all(e.initializers.beforeStart.map(t=>t(e))),new io(!1,void 0,e.initializers.afterStarted,Gn.WebAssembly);{const n=[e,t.resources?.extensions??{}],r=new io(!0,void 0,void 0,Gn.WebAssembly),o=t?.resources?.libraryInitializers;let i;return i=o?"length"in o?o:Object.keys(o).map(e=>({name:e})):[],await r.importInitializersAsync(i,n),r}}(e,n)},onDownloadResourceProgress:No,config:n,out:Mo,err:Po};return r}(e,t);e.applicationCulture&&n.withApplicationCulture(e.applicationCulture),e.environment&&n.withApplicationEnvironment(e.environment),e.loadBootResource&&n.withResourceLoader(e.loadBootResource),n.withModuleConfig(r),e.configureRuntime&&e.configureRuntime(n),Io=await n.create()}(e,t)},start:function(){return async function(){if(!Io)throw new Error("The runtime must be loaded it gets configured.");const{setModuleImports:t,INTERNAL:n,getConfig:r,invokeLibraryInitializers:o}=Io;Eo=n,Ro="function"==typeof Eo.monoStringToStringUnsafe,function(e){const t=_o.match(/^Mac/i)?"Cmd":"Alt";Co(e)&&console.info(`Debugging hotkey: Shift+${t}+D (when application has focus)`),document.addEventListener("keydown",t=>{t.shiftKey&&(t.metaKey||t.altKey)&&"KeyD"===t.code&&(Co(e)?navigator.userAgent.includes("Firefox")?async function(){const e=await fetch(`_framework/debug?url=${encodeURIComponent(location.href)}&isFirefox=true`);200!==e.status&&console.warn(await e.text())}():wo?function(){const e=document.createElement("a");e.href=`_framework/debug?url=${encodeURIComponent(location.href)}`,e.target="_blank",e.rel="noopener noreferrer",e.click()}():console.error("Currently, only Microsoft Edge (80+), Google Chrome, or Chromium, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))})}(r()),Qt.runtime=Io,Qt._internal.dotNetCriticalError=Po,t("blazor-internal",{Blazor:{_internal:Qt._internal}});const i=await Io.getAssemblyExports("Microsoft.AspNetCore.Components.WebAssembly");return Object.assign(Qt._internal,{dotNetExports:{...i.Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime}}),So=e.attachDispatcher({beginInvokeDotNetFromJS:(e,t,n,r,o)=>{if(Uo(),!r&&!t)throw new Error("Either assemblyName or dotNetObjectId must have a non null value.");const i=r?r.toString():t;Qt._internal.dotNetExports.BeginInvokeDotNet(e?e.toString():null,i,n,o)},endInvokeJSFromDotNet:(e,t,n)=>{Qt._internal.dotNetExports.EndInvokeJS(n)},sendByteArray:(e,t)=>{Qt._internal.dotNetExports.ReceiveByteArrayFromJS(e,t)},invokeDotNetFromJS:(e,t,n,r)=>(Uo(),Qt._internal.dotNetExports.InvokeDotNet(e||null,t,n??0,r))}),{invokeLibraryInitializers:o}}()},callEntryPoint:async function(){try{await Io.runMain(Io.getConfig().mainAssemblyName,[])}catch(e){console.error(e),Gr()}},getArrayEntryPtr:function(e,t,n){return Ro?Lo(e)+4+t*n:Lo(e)+t*n},getObjectFieldsBaseAddress:function(e){return Ro?e+8:e+4},readInt16Field:function(e,t){return Io.getHeapI16(e+(t||0))},readInt32Field:function(e,t){return Io.getHeapI32(e+(t||0))},readUint64Field:function(e,t){return Io.getHeapU52(e+(t||0))},readObjectField:function(e,t){return Io.getHeapU32(e+(t||0))},readStringField:function(e,t){const n=Io.getHeapU32(e+(t||0));if(0===n)return null;if(!Ro){Ao||(Ao=new TextDecoder("utf-16le"));const e=Io.getHeapU32(n+4),t=n+8,r=Io.localHeapViewU8();return Ao.decode(r.subarray(t,t+2*e))}return Eo.monoStringToStringUnsafe(n)},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return Uo(),To=Bo.create(),To},invokeWhenHeapUnlocked:function(e){To?To.enqueuePostReleaseAction(e):e()}};function No(e,t){const n=e/t*100;document.documentElement.style.setProperty("--blazor-load-percentage",`${n}%`),document.documentElement.style.setProperty("--blazor-load-percentage-text",`"${Math.floor(n)}%"`)}const xo=["DEBUGGING ENABLED"],Mo=e=>xo.indexOf(e)<0&&console.log(e),Po=e=>{console.error(e||"(null)"),Gr()};function Lo(e){return Ro?e+12:e+8}function Uo(){if(To)throw new Error("Assertion failed - heap is currently locked")}class Bo{enqueuePostReleaseAction(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)}release(){if(To!==this)throw new Error("Trying to release a lock which isn't current");for(Ro&&Eo.mono_wasm_gc_unlock(),To=null;this.postReleaseActions?.length;)this.postReleaseActions.shift()(),Uo()}static create(){return Ro&&Eo.mono_wasm_gc_lock(),new Bo}}class Oo{constructor(e){this.batchAddress=e,this.arrayRangeReader=Fo,this.arrayBuilderSegmentReader=$o,this.diffReader=Ho,this.editReader=jo,this.frameReader=Wo}updatedComponents(){return t.readStructField(this.batchAddress,0)}referenceFrames(){return t.readStructField(this.batchAddress,Fo.structLength)}disposedComponentIds(){return t.readStructField(this.batchAddress,2*Fo.structLength)}disposedEventHandlerIds(){return t.readStructField(this.batchAddress,3*Fo.structLength)}updatedComponentsEntry(e,t){return zo(e,t,Ho.structLength)}referenceFramesEntry(e,t){return zo(e,t,Wo.structLength)}disposedComponentIdsEntry(e,n){const r=zo(e,n,4);return t.readInt32Field(r)}disposedEventHandlerIdsEntry(e,n){const r=zo(e,n,8);return t.readUint64Field(r)}}const Fo={structLength:8,values:e=>t.readObjectField(e,0),count:e=>t.readInt32Field(e,4)},$o={structLength:12,values:e=>{const n=t.readObjectField(e,0),r=t.getObjectFieldsBaseAddress(n);return t.readObjectField(r,0)},offset:e=>t.readInt32Field(e,4),count:e=>t.readInt32Field(e,8)},Ho={structLength:4+$o.structLength,componentId:e=>t.readInt32Field(e,0),edits:e=>t.readStructField(e,4),editsEntry:(e,t)=>zo(e,t,jo.structLength)},jo={structLength:20,editType:e=>t.readInt32Field(e,0),siblingIndex:e=>t.readInt32Field(e,4),newTreeIndex:e=>t.readInt32Field(e,8),moveToSiblingIndex:e=>t.readInt32Field(e,8),removedAttributeName:e=>t.readStringField(e,16)},Wo={structLength:36,frameType:e=>t.readInt16Field(e,4),subtreeLength:e=>t.readInt32Field(e,8),elementReferenceCaptureId:e=>t.readStringField(e,16),componentId:e=>t.readInt32Field(e,12),elementName:e=>t.readStringField(e,16),textContent:e=>t.readStringField(e,16),markupContent:e=>t.readStringField(e,16),attributeName:e=>t.readStringField(e,16),attributeValue:e=>t.readStringField(e,24),attributeEventHandlerId:e=>t.readUint64Field(e,8)};function zo(e,n,r){return t.getArrayEntryPtr(e,n,r)}class qo{constructor(e){this.componentManager=e}resolveRegisteredElement(e){const t=Number.parseInt(e);if(!Number.isNaN(t))return le(this.componentManager.resolveRootComponent(t))}getParameterValues(e){return this.componentManager.initialComponents[e].parameterValues}getParameterDefinitions(e){return this.componentManager.initialComponents[e].parameterDefinitions}getTypeName(e){return this.componentManager.initialComponents[e].typeName}getAssembly(e){return this.componentManager.initialComponents[e].assembly}getCount(){return this.componentManager.initialComponents.length}}let Jo,Vo,Ko,Xo,Go=!1,Yo=!1,Qo=!0,Zo=!1;const ei=new Promise(e=>{Xo=e});let ti;const ni=new Promise(e=>{ti=e});let ri;const oi=new Promise(e=>{ri=e});function ii(e){if(Jo)throw new Error("WebAssembly options have already been configured.");!async function(e){const t=await e;Jo=t,ri()}(e)}function si(e,t){if(void 0!==Ko)throw new Error("Blazor WebAssembly has already started.");return Ko=new Promise(ai.bind(null,e,t)),Ko}async function ai(e,n,r,o){(function(){if(window.parent!==window&&!window.opener&&window.frameElement){const e=window.sessionStorage&&window.sessionStorage["Microsoft.AspNetCore.Components.WebAssembly.Authentication.CachedAuthSettings"],t=e&&JSON.parse(e);return t&&t.redirect_uri&&location.href.startsWith(t.redirect_uri)}return!1})()&&await new Promise(()=>{});const i=ci(n);M((e,t,n)=>{const r=rt(e);r?.eventDelegator.getHandler(t)&&Do.invokeWhenHeapUnlocked(n)}),Qt._internal.invokeJSJson=li,Qt._internal.endInvokeDotNetFromJS=hi,Qt._internal.receiveWebAssemblyDotNetDataStream=di,Qt._internal.receiveByteArray=ui;const s=(t=Do,t);Qt.platform=s,Qt._internal.renderBatch=(e,t)=>{const n=Do.beginHeapLock();try{ot(e,new Oo(t))}finally{n.release()}},Qt._internal.navigationManager.listenForNavigationEvents(Gn.WebAssembly,async(e,t,n)=>{await So.invokeDotNetStaticMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t,n)},async(e,t,n,r)=>{const o=await So.invokeDotNetStaticMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChangingAsync",t,n,r);Qt._internal.navigationManager.endLocationChanging(e,o)});const a=new qo(e);Qt._internal.registeredComponents={getRegisteredComponentsCount:()=>a.getCount(),getAssembly:e=>a.getAssembly(e),getTypeName:e=>a.getTypeName(e),getParameterDefinitions:e=>a.getParameterDefinitions(e)||"",getParameterValues:e=>a.getParameterValues(e)||""},Qt._internal.getPersistedState=()=>K(document)||"",Qt._internal.getInitialComponentsUpdate=()=>ni,Qt._internal.updateRootComponents=(e,t)=>{Qt._internal.dotNetExports?.UpdateRootComponentsCore(e,t)},Qt._internal.endUpdateRootComponents=t=>e.onAfterUpdateRootComponents?.(t),Qt._internal.attachRootComponentToElement=(e,t,n)=>{const r=a.resolveRegisteredElement(e);r?nt(n,r,t,!1):function(e,t,n){const r="::before";let o=!1;if(e.endsWith("::after"))e=e.slice(0,-7),o=!0;else if(e.endsWith(r))throw new Error(`The '${r}' selector is not supported.`);const i=_(e)||document.querySelector(e);if(!i)throw new Error(`Could not find any element matching selector '${e}'.`);nt(n,he(i,!0),t,o)}(e,t,n)};try{await i,await s.start()}catch(e){throw new Error(`Failed to start platform. Reason: ${e}`)}s.callEntryPoint(),ko.invokeAfterStartedCallbacks(Qt),Yo=!0,r()}function ci(e){return Vo??=(async()=>{await oi;const t=Jo??{};t.environment||(t.environment=e?.environmentName??void 0);const n=Jo?.configureRuntime;t.configureRuntime=t=>{n?.(t),e?.environmentVariables&&t.withEnvironmentVariables(e.environmentVariables),Zo&&t.withEnvironmentVariable("__BLAZOR_WEBASSEMBLY_WAIT_FOR_ROOT_COMPONENTS","true")},await Do.load(t,Xo),Go=!0})(),Vo}function li(e,t,n,r,o,i){return 0!==o?(So.beginInvokeJSFromDotNet(o,e,r,n,t,i),null):So.invokeJSFromDotNet(e,r,n,t,i)}function hi(e,t,n){So.endInvokeDotNetFromJS(e,t,n)}function di(e,t,n,r){!function(e,t,n,r,o){let i=Kt.get(t);if(!i){const n=new ReadableStream({start(e){Kt.set(t,e),i=e}});e.supplyDotNetStream(t,n)}if(o)i.error(o),Kt.delete(t);else if(0===r)i.close(),Kt.delete(t);else{const e=n.length===r?n:new Uint8Array(n.buffer,n.byteOffset,r);i.enqueue(e)}}(So,e,t,n,r)}function ui(e,t){So.receiveByteArray(e,t)}function pi(e,t){t.namespaceURI?e.setAttributeNS(t.namespaceURI,t.name,t.value):e.setAttribute(t.name,t.value)}function fi(e,t){t.namespaceURI?e.removeAttributeNS(t.namespaceURI,t.localName):e.removeAttribute(t.name)}const gi="data-permanent";var mi,yi;!function(e){e[e.None=0]="None",e[e.Some=1]="Some",e[e.Infinite=2]="Infinite"}(mi||(mi={})),function(e){e.Keep="keep",e.Update="update",e.Insert="insert",e.Delete="delete"}(yi||(yi={}));class vi{static create(e,t,n){return 0===t&&n===e.length?e:new vi(e,t,n)}constructor(e,t,n){this.source=e,this.startIndex=t,this.length=n}item(e){return this.source.item(e+this.startIndex)}forEach(e,t){for(let t=0;t=n&&s>=r&&o(e.item(i),t.item(s))===mi.None;)i--,s--,a++;return a}(e,t,r,r,n),i=function(e){const t=[];let n=e.length-1,r=e[n]?.length-1;for(;n>0||r>0;){const o=0===n?yi.Insert:0===r?yi.Delete:e[n][r];switch(t.unshift(o),o){case yi.Keep:case yi.Update:n--,r--;break;case yi.Insert:r--;break;case yi.Delete:n--}}return t}(function(e,t,n){const r=[],o=[],i=e.length,s=t.length;if(0===i&&0===s)return[];for(let e=0;e<=i;e++)(r[e]=Array(s+1))[0]=e,o[e]=Array(s+1);const a=r[0];for(let e=1;e<=s;e++)a[e]=e;for(let a=1;a<=i;a++)for(let i=1;i<=s;i++){const s=n(e.item(a-1),t.item(i-1)),c=r[a-1][i]+1,l=r[a][i-1]+1;let h;switch(s){case mi.None:h=r[a-1][i-1];break;case mi.Some:h=r[a-1][i-1]+1;break;case mi.Infinite:h=Number.MAX_VALUE}h{const t=location.href,n=lt(t,e);if(history.pushState(null,"",e),n)dt(e);else{const n=ht(e,t);Hi(e,!0),n||it(Xe.AfterDocumentUpdate)}})}function Fi(e){mt()||(null==e.state&<(Ui,location.href)?Ui=location.href:Hi(location.href,!1))}function $i(e){if(mt()||e.defaultPrevented)return;const t=e.target;if(t instanceof HTMLFormElement){if(!function(e){const t=e.getAttribute("data-enhance");return"string"==typeof t&&""===t||"true"===t?.toLowerCase()}(t))return;const n=e.submitter?.getAttribute("formmethod")||t.method;if("dialog"===n)return void console.warn('A form cannot be enhanced when its method is "dialog".');const r=e.submitter?.getAttribute("formtarget")||t.target;if(""!==r&&"_self"!==r)return void console.warn('A form cannot be enhanced when its target is different from the default value "_self".');e.preventDefault();const o=new URL(e.submitter?.getAttribute("formaction")||t.action,document.baseURI),i={method:n},s=new FormData(t),a=e.submitter?.getAttribute("name"),c=e.submitter?.getAttribute("value");a&&c&&s.append(a,c);const l=new URLSearchParams(s).toString();if("get"===i.method)o.search=l,history.pushState(null,"",o.toString());else{const n=e.submitter?.getAttribute("formenctype")||t.enctype;"multipart/form-data"===n?i.body=s:(i.body=l,i.headers={"content-type":n,accept:xi})}Hi(o.toString(),!1,i)}}async function Hi(e,t,n,r,o=!0){Li=!0,Mi?.abort(),function(e,t){Ze?.(e,t)}(e,t),Pi.enhancedNavigationStarted(),Mi=new AbortController;const i=Mi.signal,s=fetch(e,Object.assign({signal:i,mode:"no-cors",headers:{accept:xi}},n));let a=null;if(await async function(e,t,n){let r;try{if(r=await e,!r.body)return void n(r,"");const t=r.headers.get("ssr-framing");if(!t){const e=await r.text();return void n(r,e)}let o=!0;await r.body.pipeThrough(new TextDecoderStream).pipeThrough(function(e){let t="";return new TransformStream({transform(n,r){if(t+=n,t.indexOf(e,t.length-n.length-e.length)>=0){const n=t.split(e);n.slice(0,-1).forEach(e=>r.enqueue(e)),t=n[n.length-1]}},flush(e){e.enqueue(t)}})}(`\x3c!--${t}--\x3e`)).pipeTo(new WritableStream({write(e){o?(o=!1,n(r,e)):(e=>{const t=document.createRange().createContextualFragment(e);for(;t.firstChild;)document.body.appendChild(t.firstChild)})(e)}}))}catch(e){if("AbortError"===e.name&&t.aborted)return;throw e}}(s,i,(t,i)=>{const s=!n?.method||"get"===n.method,c=t.status>=200&&t.status<300;if("opaque"===t.type){if(s)return void Wi(e);throw new Error("Enhanced navigation does not support making a non-GET request to an endpoint that redirects to an external origin. Avoid enabling enhanced navigation for form posts that may perform external redirections.")}if(c&&"allow"!==t.headers.get("blazor-enhanced-nav")){if(s)return void Wi(e);throw new Error("Enhanced navigation does not support making a non-GET request to a non-Blazor endpoint. Avoid enabling enhanced navigation for forms that post to a non-Blazor endpoint.")}o&&(t.redirected||r)&&((r?"get"===r:s)?history.replaceState(null,"",t.url):t.url!==location.href&&history.pushState(null,"",t.url),e=t.url);const l=t.headers.get("blazor-enhanced-nav-redirect-location");if(o&&l)return void location.replace(l);o&&!t.redirected&&!s&&c&&(ht(t.url,Ui)?location.href!==Ui&&history.pushState(null,"",Ui):a=`Cannot perform enhanced form submission that changes the URL (except via a redirection), because then back/forward would not work. Either remove this form's 'action' attribute, or change its method to 'get', or do not mark it as enhanced.\nOld URL: ${location.href}\nNew URL: ${t.url}`),o&&(Ui=t.url);const h=t.headers.get("content-type");if(h?.startsWith("text/html")&&i){const e=(new DOMParser).parseFromString(i,"text/html");wi(document,e),Pi.documentUpdated()}else h?.startsWith("text/")&&i?ji(i):c||i?s?Wi(e):ji(`Error: ${n.method} request to ${e} returned non-HTML content of type ${h||"unspecified"}.`):ji(`Error: ${t.status} ${t.statusText}`)}),!i.aborted){const t=e.indexOf("#");if(t>=0){const n=e.substring(t+1),r=document.getElementById(n);r?.scrollIntoView()}if(Li=!1,Pi.enhancedNavigationCompleted(),a)throw new Error(a)}}function ji(e){document.documentElement.textContent=e;const t=document.documentElement.style;t.fontFamily="consolas, monospace",t.whiteSpace="pre-wrap",t.padding="1rem"}function Wi(e){console.warn(`Enhanced navigation failed for destination ${e}. Falling back to full page load.`),history.replaceState(null,"",e+"?"),location.replace(e)}let zi,qi=!0;function Ji(e,t){zi=t,e?.disableDomPreservation&&(qi=!1),customElements.define("blazor-ssr-end",Vi)}class Vi extends HTMLElement{connectedCallback(){const e=this.parentNode;e.parentNode?.removeChild(e),e.childNodes.forEach(e=>{if(e instanceof HTMLTemplateElement){const t=e.getAttribute("blazor-component-id");if(t)"true"!==e.getAttribute("enhanced-nav")&&Mi||function(e,t){const n=function(e){const t=`bl:${e}`,n=document.createNodeIterator(document,NodeFilter.SHOW_COMMENT);let r=null;for(;(r=n.nextNode())&&r.textContent!==t;);if(!r)return null;const o=`/bl:${e}`;let i=null;for(;(i=n.nextNode())&&i.textContent!==o;);return i?{startMarker:r,endMarker:i}:null}(e);if(n){const{startMarker:e,endMarker:r}=n;if(qi)wi({startExclusive:e,endExclusive:r},t);else{const n=r.parentNode,o=new Range;for(o.setStart(e,e.textContent.length),o.setEnd(r,0),o.deleteContents();t.childNodes[0];)n.insertBefore(t.childNodes[0],r)}zi.documentUpdated()}}(t,e.content);else{const t="true"===e.getAttribute("enhanced");switch(e.getAttribute("type")){case"redirection":Ki(e,!0,t);break;case"not-found":Ki(e,!1,t&&qi);break;case"error":ji(e.content.textContent||"Error")}}}})}}function Ki(e,t,n){const r=gt(e.content.textContent),o="form-post"===e.getAttribute("from");n&&ct(r)?Hi(r,!1,void 0,o?"post":"get",t):o?r!==location.href&&location.assign(r):location.replace(r)}class Xi{constructor(e){var t;this._circuitInactivityTimeoutMs=e,this._rootComponentsBySsrComponentId=new Map,this._seenDescriptors=new Set,this._pendingOperationBatches={},this._nextOperationBatchId=1,this._nextSsrComponentId=1,this._didWebAssemblyFailToLoadQuickly=!1,this._isComponentRefreshPending=!1,this.initialComponents=[],t=()=>{this.rootComponentsMayRequireRefresh()},k.push(t)}onAfterRenderBatch(e){e===Gn.Server&&this.circuitMayHaveNoRootComponents()}onDocumentUpdated(){this.rootComponentsMayRequireRefresh()}onEnhancedNavigationCompleted(){this.rootComponentsMayRequireRefresh(!0)}setWebAssemblyOptions(e){this._webAssemblyOptions=e}registerComponent(e){if(this._seenDescriptors.has(e))return;"webassembly"===e.type?this.startLoadingWebAssemblyIfNotStarted():"auto"===e.type&&this.startLoadingWebAssemblyIfNotStarted(1);const t=this._nextSsrComponentId++;this._seenDescriptors.add(e),this._rootComponentsBySsrComponentId.set(t,{descriptor:e,ssrComponentId:t})}unregisterComponent(e){this._seenDescriptors.delete(e.descriptor),this._rootComponentsBySsrComponentId.delete(e.ssrComponentId),this.circuitMayHaveNoRootComponents()}async startLoadingWebAssemblyIfNotStarted(e){if(void 0!==Vo)return;Zo=!0;const t=ci(this._webAssemblyOptions),n=await ei;void 0!==e&&(n.maxParallelDownloads=e),function(e){const t=Gi(e);if(!t)return!1;const n=window.localStorage.getItem(t.key);return t.value===n}(n)||this.onWebAssemblyFailedToLoadQuickly(),await t,function(e){const t=Gi(e);t&&window.localStorage.setItem(t.key,t.value)}(n),this.rootComponentsMayRequireRefresh()}onWebAssemblyFailedToLoadQuickly(){this._didWebAssemblyFailToLoadQuickly||(this._didWebAssemblyFailToLoadQuickly=!0,this.rootComponentsMayRequireRefresh())}startCircutIfNotStarted(){return void 0===uo?fo(this):!co||co.isDisposedOrDisposing()?mo():void 0}async startWebAssemblyIfNotStarted(){this.startLoadingWebAssemblyIfNotStarted(),void 0===Ko&&await si(this,this._webAssemblyOptions)}rootComponentsMayRequireRefresh(e=!1){this._isComponentRefreshPending||(this._isComponentRefreshPending=!0,queueMicrotask(()=>{this._isComponentRefreshPending=!1,this.refreshRootComponents(this._rootComponentsBySsrComponentId.values(),e)}))}circuitMayHaveNoRootComponents(){if(this.rendererHasExistingOrPendingComponents(Gn.Server,"server","auto"))return clearTimeout(this._circuitInactivityTimeoutId),void(this._circuitInactivityTimeoutId=void 0);void 0===this._circuitInactivityTimeoutId&&(this._circuitInactivityTimeoutId=setTimeout(()=>{this.rendererHasExistingOrPendingComponents(Gn.Server,"server","auto")||(async function(){await(co?.dispose())}(),this._circuitInactivityTimeoutId=void 0)},this._circuitInactivityTimeoutMs))}rendererHasComponents(e){const t=rt(e);return void 0!==t&&t.getRootComponentCount()>0}rendererHasExistingOrPendingComponents(e,...t){if(this.rendererHasComponents(e))return!0;for(const{descriptor:{type:n},assignedRendererId:r}of this._rootComponentsBySsrComponentId.values()){if(r===e)return!0;if(void 0===r&&-1!==t.indexOf(n))return!0}return!1}refreshRootComponents(e,t=!1){const n=new Map,r=new Set;for(const o of e){t&&void 0!==o.assignedRendererId&&r.add(o.assignedRendererId);const e=this.determinePendingOperation(o);if(!e)continue;const i=o.assignedRendererId;if(!i)throw new Error("Descriptors must be assigned a renderer ID before getting used as root components");let s=n.get(i);s||(s=[],n.set(i,s)),s.push(e)}let o="",i="";if(t)for(const e of r)if(e===Gn.Server)o=V(document)||"",o&&""!==o&&(n.get(Gn.Server)||n.set(Gn.Server,[]));else{if(e!==Gn.WebAssembly)throw new Error(`Unexpected renderer ID '${e}' encountered while discovering new state.`);i=K(document)||"",i&&""!==i&&(n.get(Gn.WebAssembly)||n.set(Gn.WebAssembly,[]))}for(const[e,t]of n){const n={batchId:this._nextOperationBatchId++,operations:t};this._pendingOperationBatches[n.batchId]=n;const r=JSON.stringify(n);e===Gn.Server?yo(r,o):this.updateWebAssemblyRootComponents(r,i)}this.circuitMayHaveNoRootComponents()}updateWebAssemblyRootComponents(e,t){Qo?(ti(e),Qo=!1):function(e,t){if(!Ko)throw new Error("Blazor WebAssembly has not started.");if(!Qt._internal.updateRootComponents)throw new Error("Blazor WebAssembly has not initialized.");Yo?Qt._internal.updateRootComponents(e,t):async function(e,t){if(await Ko,!Qt._internal.updateRootComponents)throw new Error("Blazor WebAssembly has not initialized.");Qt._internal.updateRootComponents(e,t)}(e,t)}(e,t)}resolveRendererIdForDescriptor(e){switch("auto"===e.type?this.getAutoRenderMode():e.type){case"server":return this.startCircutIfNotStarted(),Gn.Server;case"webassembly":return this.startWebAssemblyIfNotStarted(),Gn.WebAssembly;case null:return null}}getAutoRenderMode(){return this.rendererHasExistingOrPendingComponents(Gn.WebAssembly,"webassembly")?"webassembly":this.rendererHasExistingOrPendingComponents(Gn.Server,"server")?"server":Go?"webassembly":this._didWebAssemblyFailToLoadQuickly?"server":null}determinePendingOperation(e){if(t=e.descriptor,document.contains(t.start)){if(void 0===e.assignedRendererId){if(Li||"loading"===document.readyState)return null;const t=this.resolveRendererIdForDescriptor(e.descriptor);return null===t?null:A(t)?(qe(e.descriptor.start,!0),e.assignedRendererId=t,e.uniqueIdAtLastUpdate=e.descriptor.uniqueId,{type:"add",ssrComponentId:e.ssrComponentId,marker:oe(e.descriptor)}):null}return A(e.assignedRendererId)?e.uniqueIdAtLastUpdate===e.descriptor.uniqueId?null:(e.uniqueIdAtLastUpdate=e.descriptor.uniqueId,{type:"update",ssrComponentId:e.ssrComponentId,marker:oe(e.descriptor)}):null}return e.hasPendingRemoveOperation?null:void 0===e.assignedRendererId?(this.unregisterComponent(e),null):A(e.assignedRendererId)?(qe(e.descriptor.start,!1),e.hasPendingRemoveOperation=!0,{type:"remove",ssrComponentId:e.ssrComponentId}):null;var t}resolveRootComponent(e){const t=this._rootComponentsBySsrComponentId.get(e);if(!t)throw new Error(`Could not resolve a root component with SSR component ID '${e}'.`);return t.descriptor}onAfterUpdateRootComponents(e){const t=this._pendingOperationBatches[e];delete this._pendingOperationBatches[e];for(const e of t.operations)switch(e.type){case"remove":{const t=this._rootComponentsBySsrComponentId.get(e.ssrComponentId);t&&this.unregisterComponent(t);break}}}onComponentReload(e){for(const[t,n]of this._rootComponentsBySsrComponentId.entries())n.assignedRendererId===e&&(n.assignedRendererId=void 0,We(n.descriptor.start,!1),Je(n.descriptor.start));this.rootComponentsMayRequireRefresh()}}function Gi(e){const t=e.resources?.hash,n=e.mainAssemblyName;return t&&n?{key:`blazor-resource-hash:${n}`,value:t}:null}class Yi{constructor(){this._eventListeners=new Map}static create(e){const t=new Yi;return e.addEventListener=t.addEventListener.bind(t),e.removeEventListener=t.removeEventListener.bind(t),t}addEventListener(e,t){let n=this._eventListeners.get(e);n||(n=new Set,this._eventListeners.set(e,n)),n.add(t)}removeEventListener(e,t){this._eventListeners.get(e)?.delete(t)}dispatchEvent(e,t){const n=this._eventListeners.get(e);if(!n)return;const r={...t,type:e};for(const e of n)e(r)}}let Qi=null,Zi=location.href,es=!1;function ts(){null!==document.activeElement&&document.activeElement!==document.body||document.querySelector("[autofocus]")||is()}function ns(){ht(Zi,location.href)||(es=!0),Zi=location.href}function rs(){es&&is()}function os(){es=!1}function is(){const e=Qi?.getAttribute("selector");e&&Lt.focusBySelector(e)}class ss extends HTMLElement{connectedCallback(){Qi=this}disconnectedCallback(){Qi===this&&(Qi=null)}}let as,cs=!1;function ls(e){if(cs)throw new Error("Blazor has already started.");cs=!0,e=e||{},e.logLevel??=Xt.Error,Qt._internal.isBlazorWeb=!0,Qt._internal.hotReloadApplied=()=>{pt()&&ft(location.href,!0)},as=new Xi(e?.ssr?.circuitInactivityTimeoutMs??2e3);const t=Yi.create(Qt),n={enhancedNavigationStarted:()=>{t.dispatchEvent("enhancednavigationstart",{})},documentUpdated:()=>{as.onDocumentUpdated(),st(Xe.AfterDocumentUpdate),t.dispatchEvent("enhancedload",{})},enhancedNavigationCompleted(){as.onEnhancedNavigationCompleted(),t.dispatchEvent("enhancednavigationend",{})}};return bi=as,Ji(e?.ssr,n),e?.ssr?.disableDomPreservation||(Pi=n,document.addEventListener("click",Oi),document.addEventListener("submit",$i),window.addEventListener("popstate",Fi),Qe=Bi),function(e){customElements.define("blazor-focus-on-navigate",ss),e.addEventListener("enhancednavigationstart",ns),e.addEventListener("enhancednavigationend",rs),document.addEventListener("focusin",os),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",ts,{once:!0}):ts()}(t),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",hs.bind(null,e)):hs(e),Promise.resolve()}function hs(e){const t=Zr(e?.circuit||{});e.circuit=t,e.webAssembly=e.webAssembly||{};const n=async function(e,t){const n=X(document,q,"initializers");if(!n)return new io(!1,t);const r=(JSON.parse(atob(n))??[]).map(e=>({name:e})),o=new io(!1,t);return await o.importInitializersAsync(r,[e]),o}(e,new Gt(t.logLevel));!function(e){if(lo)throw new Error("Circuit options have already been configured.");so=async function(e){const t=await e;lo=Zr(t)}(e)}(ds(n,t)),ii(ds(n,e.webAssembly)),function(e){const t=Ri(e),n=function(e){const t=X(e,J,"options");if(t)return JSON.parse(t)}(e);bi?.setWebAssemblyOptions(n);for(const e of t)bi?.registerComponent(e)}(document),as.onDocumentUpdated(),async function(e){const t=await e;await t.invokeAfterStartedCallbacks(Qt)}(n)}async function ds(e,t){return await e,t}Qt.start=ls,window.DotNet=e,document&&document.currentScript&&"false"!==document.currentScript.getAttribute("autostart")&&ls()}(); diff --git a/src/Aspire.Hosting.Azure.AppConfiguration/api/Aspire.Hosting.Azure.AppConfiguration.cs b/src/Aspire.Hosting.Azure.AppConfiguration/api/Aspire.Hosting.Azure.AppConfiguration.cs index 986ff101d18..f8b14093b9b 100644 --- a/src/Aspire.Hosting.Azure.AppConfiguration/api/Aspire.Hosting.Azure.AppConfiguration.cs +++ b/src/Aspire.Hosting.Azure.AppConfiguration/api/Aspire.Hosting.Azure.AppConfiguration.cs @@ -10,19 +10,19 @@ namespace Aspire.Hosting { public static partial class AzureAppConfigurationExtensions { - [AspireExport("addAzureAppConfiguration", Description = "Adds an Azure App Configuration resource")] + [AspireExport(Description = "Adds an Azure App Configuration resource")] public static ApplicationModel.IResourceBuilder AddAzureAppConfiguration(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("runAsEmulator", Description = "Configures Azure App Configuration to run with the local emulator", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures Azure App Configuration to run with the local emulator", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsEmulator(this ApplicationModel.IResourceBuilder builder, System.Action>? configureEmulator = null) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a data bind mount for the App Configuration emulator")] + [AspireExport(Description = "Adds a data bind mount for the App Configuration emulator")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string? path = null) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a data volume for the App Configuration emulator")] + [AspireExport(Description = "Adds a data volume for the App Configuration emulator")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null) { throw null; } - [AspireExport("withHostPort", Description = "Sets the host port for the App Configuration emulator")] + [AspireExport(Description = "Sets the host port for the App Configuration emulator")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } [AspireExportIgnore(Reason = "AppConfigurationBuiltInRole is an Azure.Provisioning type not compatible with ATS. Use the AzureAppConfigurationRole-based overload instead.")] @@ -40,7 +40,7 @@ public AzureAppConfigurationEmulatorResource(AzureAppConfigurationResource inner public override ApplicationModel.ResourceAnnotationCollection Annotations { get { throw null; } } } - public partial class AzureAppConfigurationResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEndpoints, IAzurePrivateEndpointTarget + public partial class AzureAppConfigurationResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEndpoints, IAzurePrivateEndpointTarget { public AzureAppConfigurationResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -56,7 +56,7 @@ public AzureAppConfigurationResource(string name, System.Action IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } } diff --git a/src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs b/src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs index 0808eb24501..f2eae891342 100644 --- a/src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs +++ b/src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs @@ -24,26 +24,26 @@ public static ApplicationModel.IResourceBuilder PublishAsAzureContainerApp public static partial class AzureContainerAppExtensions { - [AspireExport("addAzureContainerAppEnvironment", Description = "Adds an Azure Container App Environment resource")] + [AspireExport(Description = "Adds an Azure Container App Environment resource")] public static ApplicationModel.IResourceBuilder AddAzureContainerAppEnvironment(this IDistributedApplicationBuilder builder, string name) { throw null; } [System.Obsolete("Use AddAzureContainerAppEnvironment instead. This method will be removed in a future version.")] public static IDistributedApplicationBuilder AddAzureContainerAppsInfrastructure(this IDistributedApplicationBuilder builder) { throw null; } - [AspireExport("withAzdResourceNaming", Description = "Configures resources to use azd naming conventions")] + [AspireExport(Description = "Configures resources to use azd naming conventions")] public static ApplicationModel.IResourceBuilder WithAzdResourceNaming(this ApplicationModel.IResourceBuilder builder) { throw null; } - [AspireExport("withAzureLogAnalyticsWorkspace", Description = "Configures the container app environment to use a specific Log Analytics Workspace")] + [AspireExport(Description = "Configures the container app environment to use a specific Log Analytics Workspace")] public static ApplicationModel.IResourceBuilder WithAzureLogAnalyticsWorkspace(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder workspaceBuilder) { throw null; } - [AspireExport("withCompactResourceNaming", Description = "Configures resources to use compact naming for length-constrained Azure resources")] + [AspireExport(Description = "Configures resources to use compact naming for length-constrained Azure resources")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREACANAMING001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder WithCompactResourceNaming(this ApplicationModel.IResourceBuilder builder) { throw null; } - [AspireExport("withDashboard", Description = "Configures whether the Aspire dashboard is included in the container app environment")] + [AspireExport(Description = "Configures whether the Aspire dashboard is included in the container app environment")] public static ApplicationModel.IResourceBuilder WithDashboard(this ApplicationModel.IResourceBuilder builder, bool enable = true) { throw null; } - [AspireExport("withHttpsUpgrade", Description = "Configures whether HTTP endpoints are upgraded to HTTPS")] + [AspireExport(Description = "Configures whether HTTP endpoints are upgraded to HTTPS")] public static ApplicationModel.IResourceBuilder WithHttpsUpgrade(this ApplicationModel.IResourceBuilder builder, bool upgrade = true) { throw null; } } @@ -56,21 +56,21 @@ public static ApplicationModel.IResourceBuilder PublishAsAzureContainerApp public static partial class ContainerAppExtensions { - [AspireExportIgnore(Reason = "Extends ContainerApp (Azure.Provisioning type) which is not an IResourceBuilder target, so the ATS codegen cannot generate a wrapper class for it.")] + [AspireExport(Description = "Configures the custom domain for the container app")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREACADOMAINS001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static void ConfigureCustomDomain(this global::Azure.Provisioning.AppContainers.ContainerApp app, ApplicationModel.IResourceBuilder customDomain, ApplicationModel.IResourceBuilder certificateName) { } - [AspireExport("publishAsConfiguredAzureContainerAppJob", Description = "Configures the compute resource as an Azure Container App Job with custom configuration")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal publishAsAzureContainerAppJob dispatcher export.")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder PublishAsAzureContainerAppJob(this ApplicationModel.IResourceBuilder resource, System.Action configure) where T : ApplicationModel.IComputeResource { throw null; } - [AspireExport("publishAsAzureContainerAppJob", Description = "Configures the compute resource as a manually triggered Azure Container App Job")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal publishAsAzureContainerAppJob dispatcher export.")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder PublishAsAzureContainerAppJob(this ApplicationModel.IResourceBuilder resource) where T : ApplicationModel.IComputeResource { throw null; } - [AspireExport("publishAsConfiguredScheduledAzureContainerAppJob", Description = "Configures the compute resource as a scheduled Azure Container App Job with custom configuration")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal publishAsScheduledAzureContainerAppJob dispatcher export.")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder PublishAsScheduledAzureContainerAppJob(this ApplicationModel.IResourceBuilder resource, string cronExpression, System.Action? configure = null) where T : ApplicationModel.IComputeResource { throw null; } @@ -117,6 +117,9 @@ public AzureContainerAppEnvironmentResource(string name, System.Action PublishAsAzureAppServiceWebsite(this ApplicationModel.IResourceBuilder builder, System.Action? configure = null, System.Action? configureSlot = null) where T : ApplicationModel.IComputeResource { throw null; } - [AspireExport("skipEnvironmentVariableNameChecks", Description = "Skips Azure App Service environment variable name validation for the compute resource")] + [AspireExport(Description = "Skips Azure App Service environment variable name validation for the compute resource")] public static ApplicationModel.IResourceBuilder SkipEnvironmentVariableNameChecks(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IComputeResource { throw null; } } public static partial class AzureAppServiceEnvironmentExtensions { - [AspireExport("addAzureAppServiceEnvironment", Description = "Adds an Azure App Service environment resource")] + [AspireExport(Description = "Adds an Azure App Service environment resource")] public static ApplicationModel.IResourceBuilder AddAzureAppServiceEnvironment(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("withAzureApplicationInsightsLocationParameter", Description = "Enables Azure Application Insights for the Azure App Service environment using a location parameter")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withAzureApplicationInsights dispatcher export.")] public static ApplicationModel.IResourceBuilder WithAzureApplicationInsights(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder applicationInsightsLocation) { throw null; } - [AspireExport("withAzureApplicationInsightsResource", Description = "Enables Azure Application Insights for the Azure App Service environment using an existing Application Insights resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withAzureApplicationInsights dispatcher export.")] public static ApplicationModel.IResourceBuilder WithAzureApplicationInsights(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder applicationInsightsBuilder) { throw null; } - [AspireExport("withAzureApplicationInsightsLocation", Description = "Enables Azure Application Insights for the Azure App Service environment with a specific location")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withAzureApplicationInsights dispatcher export.")] public static ApplicationModel.IResourceBuilder WithAzureApplicationInsights(this ApplicationModel.IResourceBuilder builder, string applicationInsightsLocation) { throw null; } - [AspireExport("withAzureApplicationInsights", Description = "Enables Azure Application Insights for the Azure App Service environment")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withAzureApplicationInsights dispatcher export.")] public static ApplicationModel.IResourceBuilder WithAzureApplicationInsights(this ApplicationModel.IResourceBuilder builder) { throw null; } - [AspireExport("withDashboard", Description = "Configures whether the Aspire dashboard is included in the Azure App Service environment")] + [AspireExport(Description = "Configures whether the Aspire dashboard is included in the Azure App Service environment")] public static ApplicationModel.IResourceBuilder WithDashboard(this ApplicationModel.IResourceBuilder builder, bool enable = true) { throw null; } - [AspireExport("withDeploymentSlotParameter", Description = "Configures the deployment slot for all Azure App Services in the environment using a parameter")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withDeploymentSlot dispatcher export.")] public static ApplicationModel.IResourceBuilder WithDeploymentSlot(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder deploymentSlot) { throw null; } - [AspireExport("withDeploymentSlot", Description = "Configures the deployment slot for all Azure App Services in the environment")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withDeploymentSlot dispatcher export.")] public static ApplicationModel.IResourceBuilder WithDeploymentSlot(this ApplicationModel.IResourceBuilder builder, string deploymentSlot) { throw null; } + + [AspireExport(Description = "Configures whether HTTP endpoints are automatically upgraded to HTTPS in Azure App Service")] + public static ApplicationModel.IResourceBuilder WithHttpsUpgrade(this ApplicationModel.IResourceBuilder builder, bool upgrade = true) { throw null; } } } @@ -73,6 +76,9 @@ public AzureAppServiceEnvironmentResource(string name, System.Action AddAzureApplicationInsights(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? logAnalyticsWorkspace) { throw null; } - [AspireExport("addAzureApplicationInsights", Description = "Adds an Azure Application Insights resource")] + [AspireExport(Description = "Adds an Azure Application Insights resource")] public static ApplicationModel.IResourceBuilder AddAzureApplicationInsights(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("withLogAnalyticsWorkspace", Description = "Configures the Application Insights resource to use a Log Analytics Workspace")] + [AspireExport(Description = "Configures the Application Insights resource to use a Log Analytics Workspace")] public static ApplicationModel.IResourceBuilder WithLogAnalyticsWorkspace(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder logAnalyticsWorkspace) { throw null; } [AspireExportIgnore(Reason = "BicepOutputReference is not ATS-compatible. Use the IResourceBuilder overload instead.")] @@ -26,7 +26,7 @@ public static partial class AzureApplicationInsightsExtensions namespace Aspire.Hosting.Azure { - public partial class AzureApplicationInsightsResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class AzureApplicationInsightsResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public AzureApplicationInsightsResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } diff --git a/src/Aspire.Hosting.Azure.CognitiveServices/api/Aspire.Hosting.Azure.CognitiveServices.cs b/src/Aspire.Hosting.Azure.CognitiveServices/api/Aspire.Hosting.Azure.CognitiveServices.cs index 6b3d40eb2ff..76d3034a168 100644 --- a/src/Aspire.Hosting.Azure.CognitiveServices/api/Aspire.Hosting.Azure.CognitiveServices.cs +++ b/src/Aspire.Hosting.Azure.CognitiveServices/api/Aspire.Hosting.Azure.CognitiveServices.cs @@ -10,17 +10,17 @@ namespace Aspire.Hosting { public static partial class AzureOpenAIExtensions { - [AspireExport("addAzureOpenAI", Description = "Adds an Azure OpenAI resource")] + [AspireExport(Description = "Adds an Azure OpenAI resource")] public static ApplicationModel.IResourceBuilder AddAzureOpenAI(this IDistributedApplicationBuilder builder, string name) { throw null; } [AspireExportIgnore(Reason = "Obsolete API that accepts AzureOpenAIDeployment which is not ATS-compatible.")] [System.Obsolete("AddDeployment taking an AzureOpenAIDeployment is deprecated. Please the AddDeployment overload that returns an AzureOpenAIDeploymentResource instead.")] public static ApplicationModel.IResourceBuilder AddDeployment(this ApplicationModel.IResourceBuilder builder, ApplicationModel.AzureOpenAIDeployment deployment) { throw null; } - [AspireExport("addDeployment", Description = "Adds an Azure OpenAI deployment resource")] + [AspireExport(Description = "Adds an Azure OpenAI deployment resource")] public static ApplicationModel.IResourceBuilder AddDeployment(this ApplicationModel.IResourceBuilder builder, string name, string modelName, string modelVersion) { throw null; } - [AspireExport("withProperties", Description = "Configures properties of an Azure OpenAI deployment", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures properties of an Azure OpenAI deployment", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithProperties(this ApplicationModel.IResourceBuilder builder, System.Action configure) { throw null; } [AspireExportIgnore(Reason = "CognitiveServicesBuiltInRole is an Azure.Provisioning type not compatible with ATS. Use the enum-based overload instead.")] @@ -48,7 +48,7 @@ public AzureOpenAIDeployment(string name, string modelName, string modelVersion, } [AspireExport(ExposeProperties = true)] - public partial class AzureOpenAIDeploymentResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class AzureOpenAIDeploymentResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public AzureOpenAIDeploymentResource(string name, string modelName, string modelVersion, AzureOpenAIResource parent) : base(default!) { } @@ -70,7 +70,7 @@ public AzureOpenAIDeploymentResource(string name, string modelName, string model } [AspireExport] - public partial class AzureOpenAIResource : Azure.AzureProvisioningResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class AzureOpenAIResource : Azure.AzureProvisioningResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences, Azure.IAzurePrivateEndpointTarget, Azure.IAzureNspAssociationTarget { public AzureOpenAIResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -83,6 +83,8 @@ public AzureOpenAIResource(string name, System.Action> IResourceWithConnectionString.GetConnectionProperties() { throw null; } + + System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } + + System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } } } \ No newline at end of file diff --git a/src/Aspire.Hosting.Azure.ContainerRegistry/api/Aspire.Hosting.Azure.ContainerRegistry.cs b/src/Aspire.Hosting.Azure.ContainerRegistry/api/Aspire.Hosting.Azure.ContainerRegistry.cs index b82ee52224b..07f6901c4d4 100644 --- a/src/Aspire.Hosting.Azure.ContainerRegistry/api/Aspire.Hosting.Azure.ContainerRegistry.cs +++ b/src/Aspire.Hosting.Azure.ContainerRegistry/api/Aspire.Hosting.Azure.ContainerRegistry.cs @@ -10,10 +10,10 @@ namespace Aspire.Hosting { public static partial class AzureContainerRegistryExtensions { - [AspireExport("addAzureContainerRegistry", Description = "Adds an Azure Container Registry resource to the distributed application model.")] + [AspireExport(Description = "Adds an Azure Container Registry resource to the distributed application model.")] public static ApplicationModel.IResourceBuilder AddAzureContainerRegistry(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("getAzureContainerRegistry", Description = "Gets the Azure Container Registry associated with a compute environment resource.")] + [AspireExport(Description = "Gets the Azure Container Registry associated with a compute environment resource.")] public static ApplicationModel.IResourceBuilder GetAzureContainerRegistry(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IResource, Azure.IAzureComputeEnvironmentResource { throw null; } @@ -21,7 +21,7 @@ public static partial class AzureContainerRegistryExtensions public static ApplicationModel.IResourceBuilder WithAzureContainerRegistry(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder registryBuilder) where T : ApplicationModel.IResource, ApplicationModel.IComputeEnvironmentResource { throw null; } - [AspireExport("withPurgeTask", Description = "Configures a purge task for the Azure Container Registry resource.")] + [AspireExport(Description = "Configures a purge task for the Azure Container Registry resource.")] public static ApplicationModel.IResourceBuilder WithPurgeTask(this ApplicationModel.IResourceBuilder builder, string schedule, string? filter = null, System.TimeSpan? ago = null, int keep = 3, string? taskName = null) { throw null; } [AspireExportIgnore(Reason = "ContainerRegistryBuiltInRole is an Azure.Provisioning type not compatible with ATS. Use the AzureContainerRegistryRole-based overload instead.")] @@ -32,7 +32,7 @@ public static ApplicationModel.IResourceBuilder WithRoleAssignments(this A namespace Aspire.Hosting.Azure { - public partial class AzureContainerRegistryResource : AzureProvisioningResource, IAzureContainerRegistryResource, ApplicationModel.IContainerRegistry, ApplicationModel.IAzureResource, ApplicationModel.IResource + public partial class AzureContainerRegistryResource : AzureProvisioningResource, IAzureContainerRegistryResource, ApplicationModel.IContainerRegistry, ApplicationModel.IAzureResource, ApplicationModel.IResource, IAzurePrivateEndpointTarget { public AzureContainerRegistryResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -40,10 +40,16 @@ public AzureContainerRegistryResource(string name, System.Action IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } + + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } } } \ No newline at end of file diff --git a/src/Aspire.Hosting.Azure.CosmosDB/api/Aspire.Hosting.Azure.CosmosDB.cs b/src/Aspire.Hosting.Azure.CosmosDB/api/Aspire.Hosting.Azure.CosmosDB.cs index 4f1bce0d96b..ea286c206be 100644 --- a/src/Aspire.Hosting.Azure.CosmosDB/api/Aspire.Hosting.Azure.CosmosDB.cs +++ b/src/Aspire.Hosting.Azure.CosmosDB/api/Aspire.Hosting.Azure.CosmosDB.cs @@ -8,7 +8,7 @@ //------------------------------------------------------------------------------ namespace Aspire.Hosting { - public partial class AzureCosmosDBResource : Azure.AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEndpoints, Azure.IResourceWithAzureFunctionsConfig, Azure.IAzurePrivateEndpointTarget + public partial class AzureCosmosDBResource : Azure.AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEndpoints, Azure.IResourceWithAzureFunctionsConfig, Azure.IAzurePrivateEndpointTarget, Azure.IAzureNspAssociationTarget { public AzureCosmosDBResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -39,7 +39,7 @@ public override void AddRoleAssignments(Azure.IAddRoleAssignmentsContext roleAss System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string Azure.IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } @@ -48,49 +48,49 @@ void Azure.IResourceWithAzureFunctionsConfig.ApplyAzureFunctionsConfiguration(Sy public static partial class AzureCosmosExtensions { - [AspireExport("addAzureCosmosDB", Description = "Adds an Azure Cosmos DB resource")] + [AspireExport(Description = "Adds an Azure Cosmos DB resource")] public static ApplicationModel.IResourceBuilder AddAzureCosmosDB(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("addContainerWithPartitionKeyPaths", Description = "Adds an Azure Cosmos DB container resource with hierarchical partition keys")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addContainer dispatcher export.")] public static ApplicationModel.IResourceBuilder AddContainer(this ApplicationModel.IResourceBuilder builder, string name, System.Collections.Generic.IEnumerable partitionKeyPaths, string? containerName = null) { throw null; } - [AspireExport("addContainer", Description = "Adds an Azure Cosmos DB container resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addContainer dispatcher export.")] public static ApplicationModel.IResourceBuilder AddContainer(this ApplicationModel.IResourceBuilder builder, string name, string partitionKeyPath, string? containerName = null) { throw null; } - [AspireExport("addCosmosDatabase", Description = "Adds an Azure Cosmos DB database resource")] + [AspireExport(Description = "Adds an Azure Cosmos DB database resource")] public static ApplicationModel.IResourceBuilder AddCosmosDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } [AspireExportIgnore(Reason = "Obsolete API with incorrect return type. Use AddCosmosDatabase instead.")] [System.Obsolete("This method is obsolete because it has the wrong return type and will be removed in a future version. Use AddCosmosDatabase instead to add a Cosmos DB database.")] public static ApplicationModel.IResourceBuilder AddDatabase(this ApplicationModel.IResourceBuilder builder, string databaseName) { throw null; } - [AspireExport("runAsEmulator", Description = "Configures the Azure Cosmos DB resource to run using the local emulator", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures the Azure Cosmos DB resource to run using the local emulator", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsEmulator(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } - [AspireExport("runAsPreviewEmulator", Description = "Configures the Azure Cosmos DB resource to run using the preview emulator", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures the Azure Cosmos DB resource to run using the preview emulator", RunSyncOnBackgroundThread = true)] [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOSMOSDB001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder RunAsPreviewEmulator(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } - [AspireExport("withAccessKeyAuthenticationWithKeyVault", Description = "Configures Azure Cosmos DB access key authentication using a specified Azure Key Vault resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withAccessKeyAuthentication dispatcher export.")] public static ApplicationModel.IResourceBuilder WithAccessKeyAuthentication(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder keyVaultBuilder) { throw null; } - [AspireExport("withAccessKeyAuthentication", Description = "Configures Azure Cosmos DB to use access key authentication")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withAccessKeyAuthentication dispatcher export.")] public static ApplicationModel.IResourceBuilder WithAccessKeyAuthentication(this ApplicationModel.IResourceBuilder builder) { throw null; } - [AspireExport("withDataExplorer", Description = "Exposes the Data Explorer endpoint for the preview emulator")] + [AspireExport(Description = "Exposes the Data Explorer endpoint for the preview emulator")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOSMOSDB001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder WithDataExplorer(this ApplicationModel.IResourceBuilder builder, int? port = null) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a named volume for the data folder to an Azure Cosmos DB emulator resource")] + [AspireExport(Description = "Adds a named volume for the data folder to an Azure Cosmos DB emulator resource")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null) { throw null; } - [AspireExport("withDefaultAzureSku", Description = "Configures Azure Cosmos DB to use the default Azure SKU")] + [AspireExport(Description = "Configures Azure Cosmos DB to use the default Azure SKU")] public static ApplicationModel.IResourceBuilder WithDefaultAzureSku(this ApplicationModel.IResourceBuilder builder) { throw null; } - [AspireExport("withGatewayPort", Description = "Sets the host port for the Cosmos DB emulator gateway endpoint")] + [AspireExport(Description = "Sets the host port for the Cosmos DB emulator gateway endpoint")] public static ApplicationModel.IResourceBuilder WithGatewayPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } - [AspireExport("withPartitionCount", Description = "Sets the partition count for the Azure Cosmos DB emulator")] + [AspireExport(Description = "Sets the partition count for the Azure Cosmos DB emulator")] public static ApplicationModel.IResourceBuilder WithPartitionCount(this ApplicationModel.IResourceBuilder builder, int count) { throw null; } } } @@ -98,7 +98,7 @@ public static partial class AzureCosmosExtensions namespace Aspire.Hosting.Azure { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Container = {ContainerName}")] - public partial class AzureCosmosDBContainerResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig + public partial class AzureCosmosDBContainerResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig { public AzureCosmosDBContainerResource(string name, string containerName, System.Collections.Generic.IEnumerable partitionKeyPaths, AzureCosmosDBDatabaseResource parent) : base(default!) { } @@ -122,7 +122,7 @@ void IResourceWithAzureFunctionsConfig.ApplyAzureFunctionsConfiguration(System.C } [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Database = {DatabaseName}")] - public partial class AzureCosmosDBDatabaseResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig + public partial class AzureCosmosDBDatabaseResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig { public AzureCosmosDBDatabaseResource(string name, string databaseName, AzureCosmosDBResource parent) : base(default!) { } diff --git a/src/Aspire.Hosting.Azure.EventHubs/api/Aspire.Hosting.Azure.EventHubs.cs b/src/Aspire.Hosting.Azure.EventHubs/api/Aspire.Hosting.Azure.EventHubs.cs index 590f0619c00..7cdf5fd6d4a 100644 --- a/src/Aspire.Hosting.Azure.EventHubs/api/Aspire.Hosting.Azure.EventHubs.cs +++ b/src/Aspire.Hosting.Azure.EventHubs/api/Aspire.Hosting.Azure.EventHubs.cs @@ -10,25 +10,25 @@ namespace Aspire.Hosting { public static partial class AzureEventHubsExtensions { - [AspireExport("addAzureEventHubs", Description = "Adds an Azure Event Hubs namespace resource")] + [AspireExport(Description = "Adds an Azure Event Hubs namespace resource")] public static ApplicationModel.IResourceBuilder AddAzureEventHubs(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("addConsumerGroup", Description = "Adds an Azure Event Hub consumer group resource")] + [AspireExport(Description = "Adds an Azure Event Hub consumer group resource")] public static ApplicationModel.IResourceBuilder AddConsumerGroup(this ApplicationModel.IResourceBuilder builder, string name, string? groupName = null) { throw null; } [System.Obsolete("This method is obsolete because it has the wrong return type and will be removed in a future version. Use AddHub instead to add an Azure Event Hub.")] public static ApplicationModel.IResourceBuilder AddEventHub(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("addHub", Description = "Adds an Azure Event Hub resource")] + [AspireExport(Description = "Adds an Azure Event Hub resource")] public static ApplicationModel.IResourceBuilder AddHub(this ApplicationModel.IResourceBuilder builder, string name, string? hubName = null) { throw null; } - [AspireExport("runAsEmulator", Description = "Configures the Azure Event Hubs resource to run with the local emulator", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures the Azure Event Hubs resource to run with the local emulator", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsEmulator(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } [AspireExportIgnore(Reason = "Action callbacks are not ATS-compatible.")] public static ApplicationModel.IResourceBuilder WithConfiguration(this ApplicationModel.IResourceBuilder builder, System.Action configJson) { throw null; } - [AspireExport("withConfigurationFile", Description = "Sets the emulator configuration file path")] + [AspireExport(Description = "Sets the emulator configuration file path")] public static ApplicationModel.IResourceBuilder WithConfigurationFile(this ApplicationModel.IResourceBuilder builder, string path) { throw null; } [System.Obsolete("This method is obsolete because it doesn't work as intended and will be removed in a future version.")] @@ -40,10 +40,10 @@ public static partial class AzureEventHubsExtensions [System.Obsolete("Use WithHostPort instead.")] public static ApplicationModel.IResourceBuilder WithGatewayPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } - [AspireExport("withHostPort", Description = "Sets the host port for the Event Hubs emulator endpoint")] + [AspireExport(Description = "Sets the host port for the Event Hubs emulator endpoint")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } - [AspireExport("withProperties", Description = "Configures properties of an Azure Event Hub", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures properties of an Azure Event Hub", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithProperties(this ApplicationModel.IResourceBuilder builder, System.Action configure) { throw null; } [AspireExportIgnore(Reason = "EventHubsBuiltInRole is an Azure.Provisioning type not compatible with ATS. Use the AzureEventHubsRole-based overload instead.")] @@ -55,7 +55,7 @@ public static ApplicationModel.IResourceBuilder WithRoleAssignments(this A namespace Aspire.Hosting.Azure { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, ConsumerGroup = {ConsumerGroupName}")] - public partial class AzureEventHubConsumerGroupResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig + public partial class AzureEventHubConsumerGroupResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig { public AzureEventHubConsumerGroupResource(string name, string consumerGroupName, AzureEventHubResource parent) : base(default!) { } @@ -72,7 +72,7 @@ void IResourceWithAzureFunctionsConfig.ApplyAzureFunctionsConfiguration(System.C [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Hub = {HubName}")] [AspireExport(ExposeProperties = true)] - public partial class AzureEventHubResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig + public partial class AzureEventHubResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig { public AzureEventHubResource(string name, string hubName, AzureEventHubsResource parent) : base(default!) { } @@ -99,7 +99,7 @@ public AzureEventHubsEmulatorResource(AzureEventHubsResource innerResource) : ba } [AspireExport] - public partial class AzureEventHubsResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEndpoints, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget + public partial class AzureEventHubsResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEndpoints, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget, IAzureNspAssociationTarget { public AzureEventHubsResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -123,7 +123,7 @@ public AzureEventHubsResource(string name, System.Action> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } diff --git a/src/Aspire.Hosting.Azure.FrontDoor/api/Aspire.Hosting.Azure.FrontDoor.cs b/src/Aspire.Hosting.Azure.FrontDoor/api/Aspire.Hosting.Azure.FrontDoor.cs new file mode 100644 index 00000000000..1a15edd0751 --- /dev/null +++ b/src/Aspire.Hosting.Azure.FrontDoor/api/Aspire.Hosting.Azure.FrontDoor.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +namespace Aspire.Hosting +{ + public static partial class AzureFrontDoorExtensions + { + [AspireExport(Description = "Adds an Azure Front Door resource")] + public static ApplicationModel.IResourceBuilder AddAzureFrontDoor(this IDistributedApplicationBuilder builder, string name) { throw null; } + + [AspireExport(Description = "Adds an origin (backend) to the Azure Front Door resource")] + public static ApplicationModel.IResourceBuilder WithOrigin(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder resource) + where T : ApplicationModel.IComputeResource, ApplicationModel.IResourceWithEndpoints { throw null; } + } +} + +namespace Aspire.Hosting.Azure +{ + public partial class AzureFrontDoorResource : AzureProvisioningResource + { + public AzureFrontDoorResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } + + public BicepOutputReference GetEndpointUrl(string originResourceName) { throw null; } + } +} \ No newline at end of file diff --git a/src/Aspire.Hosting.Azure.Functions/api/Aspire.Hosting.Azure.Functions.cs b/src/Aspire.Hosting.Azure.Functions/api/Aspire.Hosting.Azure.Functions.cs index b4a7a62d725..5c69bc50633 100644 --- a/src/Aspire.Hosting.Azure.Functions/api/Aspire.Hosting.Azure.Functions.cs +++ b/src/Aspire.Hosting.Azure.Functions/api/Aspire.Hosting.Azure.Functions.cs @@ -10,20 +10,51 @@ namespace Aspire.Hosting { public static partial class AzureFunctionsProjectResourceExtensions { - [AspireExport("addAzureFunctionsProject", Description = "Adds an Azure Functions project to the distributed application")] + [AspireExport(Description = "Adds an Azure Functions project to the distributed application")] public static ApplicationModel.IResourceBuilder AddAzureFunctionsProject(this IDistributedApplicationBuilder builder, string name, string projectPath) { throw null; } [AspireExportIgnore(Reason = "TProject : IProjectMetadata is a .NET-specific generic constraint not compatible with ATS. Use the project path overload instead.")] public static ApplicationModel.IResourceBuilder AddAzureFunctionsProject(this IDistributedApplicationBuilder builder, string name) where TProject : IProjectMetadata, new() { throw null; } - [AspireExport("withHostStorage", Description = "Configures the Azure Functions project to use specified Azure Storage as host storage")] + [AspireExport(Description = "Configures the Azure Functions project to use specified Azure Storage as host storage")] public static ApplicationModel.IResourceBuilder WithHostStorage(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder storage) { throw null; } [AspireExportIgnore(Reason = "IResourceWithAzureFunctionsConfig is an internal interface constraint not compatible with ATS.")] public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder destination, ApplicationModel.IResourceBuilder source, string? connectionName = null) where TSource : ApplicationModel.IResourceWithConnectionString, Azure.IResourceWithAzureFunctionsConfig { throw null; } } + + public static partial class DurableTaskResourceExtensions + { + [AspireExport(Description = "Adds a Durable Task scheduler resource to the distributed application.")] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public static ApplicationModel.IResourceBuilder AddDurableTaskScheduler(this IDistributedApplicationBuilder builder, string name) { throw null; } + + [AspireExport(Description = "Adds a Durable Task hub resource associated with the scheduler.")] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public static ApplicationModel.IResourceBuilder AddTaskHub(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } + + [AspireExport(Description = "Configures the Durable Task scheduler to run using the local emulator.", RunSyncOnBackgroundThread = true)] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public static ApplicationModel.IResourceBuilder RunAsEmulator(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot export is via RunAsExistingCore which accepts both string and parameter resource inputs.")] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public static ApplicationModel.IResourceBuilder RunAsExisting(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder connectionString) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot export is via RunAsExistingCore which accepts both string and parameter resource inputs.")] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public static ApplicationModel.IResourceBuilder RunAsExisting(this ApplicationModel.IResourceBuilder builder, string connectionString) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot export is via WithTaskHubNameCore which accepts both string and parameter resource inputs.")] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public static ApplicationModel.IResourceBuilder WithTaskHubName(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder taskHubName) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot export is via WithTaskHubNameCore which accepts both string and parameter resource inputs.")] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public static ApplicationModel.IResourceBuilder WithTaskHubName(this ApplicationModel.IResourceBuilder builder, string taskHubName) { throw null; } + } } namespace Aspire.Hosting.Azure @@ -34,4 +65,40 @@ public AzureFunctionsProjectResource(string name) : base(default!) { } static ApplicationModel.IResourceBuilder? ApplicationModel.IResourceWithCustomWithReference.TryWithReference(ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder source, string? connectionName, bool optional, string? name) { throw null; } } +} + +namespace Aspire.Hosting.Azure.DurableTask +{ + [AspireExport(ExposeProperties = true)] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public sealed partial class DurableTaskHubResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, IResourceWithAzureFunctionsConfig + { + public DurableTaskHubResource(string name, DurableTaskSchedulerResource scheduler) : base(default!) { } + + public ApplicationModel.ReferenceExpression ConnectionStringExpression { get { throw null; } } + + public DurableTaskSchedulerResource Parent { get { throw null; } } + + public ApplicationModel.ReferenceExpression TaskHubName { get { throw null; } } + + void IResourceWithAzureFunctionsConfig.ApplyAzureFunctionsConfiguration(System.Collections.Generic.IDictionary target, string connectionName) { } + } + + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public sealed partial class DurableTaskSchedulerEmulatorResource : ApplicationModel.ContainerResource + { + public DurableTaskSchedulerEmulatorResource(DurableTaskSchedulerResource scheduler) : base(default!, default) { } + + public override ApplicationModel.ResourceAnnotationCollection Annotations { get { throw null; } } + } + + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDURABLETASK001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public sealed partial class DurableTaskSchedulerResource : ApplicationModel.Resource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences + { + public DurableTaskSchedulerResource(string name) : base(default!) { } + + public ApplicationModel.ReferenceExpression ConnectionStringExpression { get { throw null; } } + + public bool IsEmulator { get { throw null; } } + } } \ No newline at end of file diff --git a/src/Aspire.Hosting.Azure.KeyVault/api/Aspire.Hosting.Azure.KeyVault.cs b/src/Aspire.Hosting.Azure.KeyVault/api/Aspire.Hosting.Azure.KeyVault.cs index 6985bcb7ae6..8b2928d3438 100644 --- a/src/Aspire.Hosting.Azure.KeyVault/api/Aspire.Hosting.Azure.KeyVault.cs +++ b/src/Aspire.Hosting.Azure.KeyVault/api/Aspire.Hosting.Azure.KeyVault.cs @@ -10,28 +10,28 @@ namespace Aspire.Hosting { public static partial class AzureKeyVaultResourceExtensions { - [AspireExport("addAzureKeyVault", Description = "Adds an Azure Key Vault resource")] + [AspireExport(Description = "Adds an Azure Key Vault resource")] public static ApplicationModel.IResourceBuilder AddAzureKeyVault(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("addSecret", Description = "Adds a secret to the Azure Key Vault from a parameter resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addSecret dispatcher export.")] public static ApplicationModel.IResourceBuilder AddSecret(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.IResourceBuilder parameterResource) { throw null; } [AspireExportIgnore(Reason = "Raw ParameterResource overload; use the IResourceBuilder variant instead.")] public static ApplicationModel.IResourceBuilder AddSecret(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.ParameterResource parameterResource) { throw null; } - [AspireExport("addSecretFromExpression", Description = "Adds a secret to the Azure Key Vault from a reference expression")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addSecret dispatcher export.")] public static ApplicationModel.IResourceBuilder AddSecret(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.ReferenceExpression value) { throw null; } - [AspireExport("addSecretWithName", Description = "Adds a named secret to the Azure Key Vault from a parameter resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addSecret dispatcher export.")] public static ApplicationModel.IResourceBuilder AddSecret(this ApplicationModel.IResourceBuilder builder, string name, string secretName, ApplicationModel.IResourceBuilder parameterResource) { throw null; } [AspireExportIgnore(Reason = "Raw ParameterResource overload; use the IResourceBuilder variant instead.")] public static ApplicationModel.IResourceBuilder AddSecret(this ApplicationModel.IResourceBuilder builder, string name, string secretName, ApplicationModel.ParameterResource parameterResource) { throw null; } - [AspireExport("addSecretWithNameFromExpression", Description = "Adds a named secret to the Azure Key Vault from a reference expression")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addSecret dispatcher export.")] public static ApplicationModel.IResourceBuilder AddSecret(this ApplicationModel.IResourceBuilder builder, string name, string secretName, ApplicationModel.ReferenceExpression value) { throw null; } - [AspireExport("getSecret", Description = "Gets a secret reference from the Azure Key Vault")] + [AspireExport(Description = "Gets a secret reference from the Azure Key Vault")] public static Azure.IAzureKeyVaultSecretReference GetSecret(this ApplicationModel.IResourceBuilder builder, string secretName) { throw null; } [AspireExportIgnore(Reason = "KeyVaultBuiltInRole is an Azure.Provisioning type not compatible with ATS. Use the AzureKeyVaultRole-based overload instead.")] @@ -42,7 +42,7 @@ public static ApplicationModel.IResourceBuilder WithRoleAssignments(this A namespace Aspire.Hosting.Azure { - public partial class AzureKeyVaultResource : AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IAzureKeyVaultResource, ApplicationModel.IAzureResource, IAzurePrivateEndpointTarget + public partial class AzureKeyVaultResource : AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IAzureKeyVaultResource, ApplicationModel.IAzureResource, IAzurePrivateEndpointTarget, IAzureNspAssociationTarget { public AzureKeyVaultResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -66,7 +66,7 @@ public AzureKeyVaultResource(string name, System.Action> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } @@ -76,7 +76,7 @@ public AzureKeyVaultResource(string name, System.Action, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, IAzureKeyVaultSecretReference, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences + public partial class AzureKeyVaultSecretResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, IAzureKeyVaultSecretReference, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public AzureKeyVaultSecretResource(string name, string secretName, AzureKeyVaultResource parent, object value) : base(default!) { } diff --git a/src/Aspire.Hosting.Azure.Kubernetes/api/Aspire.Hosting.Azure.Kubernetes.cs b/src/Aspire.Hosting.Azure.Kubernetes/api/Aspire.Hosting.Azure.Kubernetes.cs new file mode 100644 index 00000000000..09d396f850a --- /dev/null +++ b/src/Aspire.Hosting.Azure.Kubernetes/api/Aspire.Hosting.Azure.Kubernetes.cs @@ -0,0 +1,3503 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +namespace Aspire.Hosting +{ + public static partial class AzureKubernetesEnvironmentExtensions + { + [AspireExport(Description = "Adds an Azure Kubernetes Service environment resource")] + public static ApplicationModel.IResourceBuilder AddAzureKubernetesEnvironment(this IDistributedApplicationBuilder builder, string name) { throw null; } + + [AspireExport(Description = "Adds a node pool to the AKS cluster")] + public static ApplicationModel.IResourceBuilder AddNodePool(this ApplicationModel.IResourceBuilder builder, string name, string vmSize = "Standard_D2s_v5", int minCount = 1, int maxCount = 3) { throw null; } + + [AspireExport(Description = "Configures the AKS environment to use a specific container registry")] + public static ApplicationModel.IResourceBuilder WithContainerRegistry(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder registry) { throw null; } + + [AspireExport("withNodePoolSubnet", MethodName = "withSubnet", Description = "Configures an AKS node pool to use a specific VNet subnet")] + public static ApplicationModel.IResourceBuilder WithSubnet(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder subnet) { throw null; } + + [AspireExport(Description = "Configures the AKS cluster to use a VNet subnet")] + public static ApplicationModel.IResourceBuilder WithSubnet(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder subnet) { throw null; } + + [AspireExport(Description = "Replaces the default system node pool with a customized configuration")] + public static ApplicationModel.IResourceBuilder WithSystemNodePool(this ApplicationModel.IResourceBuilder builder, string vmSize = "Standard_D2s_v5", int minCount = 1, int maxCount = 3) { throw null; } + + [AspireExport(Description = "Enables workload identity on the AKS cluster")] + public static ApplicationModel.IResourceBuilder WithWorkloadIdentity(this ApplicationModel.IResourceBuilder builder, bool enabled = true) { throw null; } + } + + public static partial class AzureKubernetesIngressExtensions + { + [AspireExport(Description = "Adds a Kubernetes Gateway API Gateway to an AKS environment")] + public static ApplicationModel.IResourceBuilder AddGateway(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } + + [AspireExport(Description = "Adds a Kubernetes Ingress resource to an AKS environment")] + public static ApplicationModel.IResourceBuilder AddIngress(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } + } +} + +namespace Aspire.Hosting.Azure.Kubernetes +{ + public sealed partial record AksNodePoolConfig(string Name, string VmSize, int MinCount, int MaxCount, AksNodePoolMode Mode) + { + } + + public enum AksNodePoolMode + { + System = 0, + User = 1 + } + + public partial class AksNodePoolResource : Hosting.Kubernetes.KubernetesNodePoolResource + { + public AksNodePoolResource(string name, AksNodePoolConfig config, AzureKubernetesEnvironmentResource parent) : base(default!, default!) { } + + public AzureKubernetesEnvironmentResource AksParent { get { throw null; } } + + public AksNodePoolConfig Config { get { throw null; } } + } + + public static partial class AksNodeVmSizes + { + public static partial class StandardAv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardA2mV2 = "Standard_A2m_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardA2V2 = "Standard_A2_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardA4mV2 = "Standard_A4m_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardA4V2 = "Standard_A4_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardA8mV2 = "Standard_A8m_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardA8V2 = "Standard_A8_v2"; + } + + public static partial class StandardBasv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardB16alsV2 = "Standard_B16als_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB16asV2 = "Standard_B16as_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB2alsV2 = "Standard_B2als_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB2asV2 = "Standard_B2as_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB32alsV2 = "Standard_B32als_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB32asV2 = "Standard_B32as_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB4alsV2 = "Standard_B4als_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB4asV2 = "Standard_B4as_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB8alsV2 = "Standard_B8als_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB8asV2 = "Standard_B8as_v2"; + } + + public static partial class StandardBpsv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardB16plsV2 = "Standard_B16pls_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB16psV2 = "Standard_B16ps_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB2plsV2 = "Standard_B2pls_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB2psV2 = "Standard_B2ps_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB4plsV2 = "Standard_B4pls_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB4psV2 = "Standard_B4ps_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB8plsV2 = "Standard_B8pls_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB8psV2 = "Standard_B8ps_v2"; + } + + public static partial class StandardBS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardB12ms = "Standard_B12ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB16ms = "Standard_B16ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB20ms = "Standard_B20ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB2ms = "Standard_B2ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB2s = "Standard_B2s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB4ms = "Standard_B4ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB8ms = "Standard_B8ms"; + } + + public static partial class StandardBsv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardB16lsV2 = "Standard_B16ls_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB16sV2 = "Standard_B16s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB2lsV2 = "Standard_B2ls_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB2sV2 = "Standard_B2s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB32lsV2 = "Standard_B32ls_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB32sV2 = "Standard_B32s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB4lsV2 = "Standard_B4ls_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB4sV2 = "Standard_B4s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB8lsV2 = "Standard_B8ls_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardB8sV2 = "Standard_B8s_v2"; + } + + public static partial class StandardD + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD11 = "Standard_D11"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD12 = "Standard_D12"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD13 = "Standard_D13"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD14 = "Standard_D14"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2 = "Standard_D2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD3 = "Standard_D3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4 = "Standard_D4"; + } + + public static partial class StandardDADSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16adsV5 = "Standard_D16ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2adsV5 = "Standard_D2ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32adsV5 = "Standard_D32ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48adsV5 = "Standard_D48ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4adsV5 = "Standard_D4ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64adsV5 = "Standard_D64ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8adsV5 = "Standard_D8ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96adsV5 = "Standard_D96ads_v5"; + } + + public static partial class StandardDadsv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD128adsV7 = "Standard_D128ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD160adsV7 = "Standard_D160ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD16adsV7 = "Standard_D16ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2adsV7 = "Standard_D2ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32adsV7 = "Standard_D32ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48adsV7 = "Standard_D48ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4adsV7 = "Standard_D4ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64adsV7 = "Standard_D64ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8adsV7 = "Standard_D8ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96adsV7 = "Standard_D96ads_v7"; + } + + public static partial class StandardDadv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16adsV6 = "Standard_D16ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2adsV6 = "Standard_D2ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32adsV6 = "Standard_D32ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48adsV6 = "Standard_D48ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4adsV6 = "Standard_D4ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64adsV6 = "Standard_D64ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8adsV6 = "Standard_D8ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96adsV6 = "Standard_D96ads_v6"; + } + + public static partial class StandardDaldsv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD128aldsV7 = "Standard_D128alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD160aldsV7 = "Standard_D160alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD16aldsV7 = "Standard_D16alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2aldsV7 = "Standard_D2alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32aldsV7 = "Standard_D32alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48aldsV7 = "Standard_D48alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4aldsV7 = "Standard_D4alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64aldsV7 = "Standard_D64alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8aldsV7 = "Standard_D8alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96aldsV7 = "Standard_D96alds_v7"; + } + + public static partial class StandardDaldv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16aldsV6 = "Standard_D16alds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2aldsV6 = "Standard_D2alds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32aldsV6 = "Standard_D32alds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48aldsV6 = "Standard_D48alds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4aldsV6 = "Standard_D4alds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64aldsV6 = "Standard_D64alds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8aldsV6 = "Standard_D8alds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96aldsV6 = "Standard_D96alds_v6"; + } + + public static partial class StandardDalsv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD128alsV7 = "Standard_D128als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD160alsV7 = "Standard_D160als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD16alsV7 = "Standard_D16als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2alsV7 = "Standard_D2als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32alsV7 = "Standard_D32als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48alsV7 = "Standard_D48als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4alsV7 = "Standard_D4als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64alsV7 = "Standard_D64als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8alsV7 = "Standard_D8als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96alsV7 = "Standard_D96als_v7"; + } + + public static partial class StandardDalv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16alsV6 = "Standard_D16als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2alsV6 = "Standard_D2als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32alsV6 = "Standard_D32als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48alsV6 = "Standard_D48als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4alsV6 = "Standard_D4als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64alsV6 = "Standard_D64als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8alsV6 = "Standard_D8als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96alsV6 = "Standard_D96als_v6"; + } + + public static partial class StandardDASv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16asV4 = "Standard_D16as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2asV4 = "Standard_D2as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32asV4 = "Standard_D32as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48asV4 = "Standard_D48as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4asV4 = "Standard_D4as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64asV4 = "Standard_D64as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8asV4 = "Standard_D8as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96asV4 = "Standard_D96as_v4"; + } + + public static partial class StandardDASv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16asV5 = "Standard_D16as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2asV5 = "Standard_D2as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32asV5 = "Standard_D32as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48asV5 = "Standard_D48as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4asV5 = "Standard_D4as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64asV5 = "Standard_D64as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8asV5 = "Standard_D8as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96asV5 = "Standard_D96as_v5"; + } + + public static partial class StandardDasv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD128asV7 = "Standard_D128as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD160asV7 = "Standard_D160as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD16asV7 = "Standard_D16as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2asV7 = "Standard_D2as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32asV7 = "Standard_D32as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48asV7 = "Standard_D48as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4asV7 = "Standard_D4as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64asV7 = "Standard_D64as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8asV7 = "Standard_D8as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96asV7 = "Standard_D96as_v7"; + } + + public static partial class StandardDAv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16aV4 = "Standard_D16a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2aV4 = "Standard_D2a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32aV4 = "Standard_D32a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48aV4 = "Standard_D48a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4aV4 = "Standard_D4a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64aV4 = "Standard_D64a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8aV4 = "Standard_D8a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96aV4 = "Standard_D96a_v4"; + } + + public static partial class StandardDav6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16asV6 = "Standard_D16as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2asV6 = "Standard_D2as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32asV6 = "Standard_D32as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48asV6 = "Standard_D48as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4asV6 = "Standard_D4as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64asV6 = "Standard_D64as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8asV6 = "Standard_D8as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96asV6 = "Standard_D96as_v6"; + } + + public static partial class StandardDCACCV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16asCcV5 = "Standard_DC16as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32asCcV5 = "Standard_DC32as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48asCcV5 = "Standard_DC48as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4asCcV5 = "Standard_DC4as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64asCcV5 = "Standard_DC64as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8asCcV5 = "Standard_DC8as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96asCcV5 = "Standard_DC96as_cc_v5"; + } + + public static partial class StandardDCADCCV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16adsCcV5 = "Standard_DC16ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32adsCcV5 = "Standard_DC32ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48adsCcV5 = "Standard_DC48ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4adsCcV5 = "Standard_DC4ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64adsCcV5 = "Standard_DC64ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8adsCcV5 = "Standard_DC8ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96adsCcV5 = "Standard_DC96ads_cc_v5"; + } + + public static partial class StandardDCADSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16adsV5 = "Standard_DC16ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2adsV5 = "Standard_DC2ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32adsV5 = "Standard_DC32ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48adsV5 = "Standard_DC48ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4adsV5 = "Standard_DC4ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64adsV5 = "Standard_DC64ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8adsV5 = "Standard_DC8ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96adsV5 = "Standard_DC96ads_v5"; + } + + public static partial class StandardDCadsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16adsV6 = "Standard_DC16ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2adsV6 = "Standard_DC2ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32adsV6 = "Standard_DC32ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48adsV6 = "Standard_DC48ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4adsV6 = "Standard_DC4ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64adsV6 = "Standard_DC64ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8adsV6 = "Standard_DC8ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96adsV6 = "Standard_DC96ads_v6"; + } + + public static partial class StandardDCASv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16asV5 = "Standard_DC16as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2asV5 = "Standard_DC2as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32asV5 = "Standard_DC32as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48asV5 = "Standard_DC48as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4asV5 = "Standard_DC4as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64asV5 = "Standard_DC64as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8asV5 = "Standard_DC8as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96asV5 = "Standard_DC96as_v5"; + } + + public static partial class StandardDCasv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16asV6 = "Standard_DC16as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2asV6 = "Standard_DC2as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32asV6 = "Standard_DC32as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48asV6 = "Standard_DC48as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4asV6 = "Standard_DC4as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64asV6 = "Standard_DC64as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8asV6 = "Standard_DC8as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96asV6 = "Standard_DC96as_v6"; + } + + public static partial class StandardDCEDV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16edsV5 = "Standard_DC16eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2edsV5 = "Standard_DC2eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32edsV5 = "Standard_DC32eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48edsV5 = "Standard_DC48eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4edsV5 = "Standard_DC4eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64edsV5 = "Standard_DC64eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8edsV5 = "Standard_DC8eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96edsV5 = "Standard_DC96eds_v5"; + } + + public static partial class StandardDCEDV6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC128edsV6 = "Standard_DC128eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16edsV6 = "Standard_DC16eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2edsV6 = "Standard_DC2eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32edsV6 = "Standard_DC32eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48edsV6 = "Standard_DC48eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4edsV6 = "Standard_DC4eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64edsV6 = "Standard_DC64eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8edsV6 = "Standard_DC8eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96edsV6 = "Standard_DC96eds_v6"; + } + + public static partial class StandardDCEV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16esV5 = "Standard_DC16es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2esV5 = "Standard_DC2es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32esV5 = "Standard_DC32es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48esV5 = "Standard_DC48es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4esV5 = "Standard_DC4es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64esV5 = "Standard_DC64es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8esV5 = "Standard_DC8es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96esV5 = "Standard_DC96es_v5"; + } + + public static partial class StandardDCEV6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC128esV6 = "Standard_DC128es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16esV6 = "Standard_DC16es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2esV6 = "Standard_DC2es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32esV6 = "Standard_DC32es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48esV6 = "Standard_DC48es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4esV6 = "Standard_DC4es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC64esV6 = "Standard_DC64es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8esV6 = "Standard_DC8es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC96esV6 = "Standard_DC96es_v6"; + } + + public static partial class StandardDCSv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2sV2 = "Standard_DC2s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4sV2 = "Standard_DC4s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8V2 = "Standard_DC8_v2"; + } + + public static partial class StandardDCSv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16sV3 = "Standard_DC16s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC24sV3 = "Standard_DC24s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2sV3 = "Standard_DC2s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32sV3 = "Standard_DC32s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48sV3 = "Standard_DC48s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4sV3 = "Standard_DC4s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8sV3 = "Standard_DC8s_v3"; + } + + public static partial class StandardDDCSv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDC16dsV3 = "Standard_DC16ds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC24dsV3 = "Standard_DC24ds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC2dsV3 = "Standard_DC2ds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC32dsV3 = "Standard_DC32ds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC48dsV3 = "Standard_DC48ds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC4dsV3 = "Standard_DC4ds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDC8dsV3 = "Standard_DC8ds_v3"; + } + + public static partial class StandardDDSv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16dsV4 = "Standard_D16ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2dsV4 = "Standard_D2ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32dsV4 = "Standard_D32ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48dsV4 = "Standard_D48ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4dsV4 = "Standard_D4ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64dsV4 = "Standard_D64ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8dsV4 = "Standard_D8ds_v4"; + } + + public static partial class StandardDDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16dsV5 = "Standard_D16ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2dsV5 = "Standard_D2ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32dsV5 = "Standard_D32ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48dsV5 = "Standard_D48ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4dsV5 = "Standard_D4ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64dsV5 = "Standard_D64ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8dsV5 = "Standard_D8ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96dsV5 = "Standard_D96ds_v5"; + } + + public static partial class StandardDdsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD128dsV6 = "Standard_D128ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD16dsV6 = "Standard_D16ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD192dsV6 = "Standard_D192ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2dsV6 = "Standard_D2ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32dsV6 = "Standard_D32ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48dsV6 = "Standard_D48ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4dsV6 = "Standard_D4ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64dsV6 = "Standard_D64ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8dsV6 = "Standard_D8ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96dsV6 = "Standard_D96ds_v6"; + } + + public static partial class StandardDDv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16dV4 = "Standard_D16d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2dV4 = "Standard_D2d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32dV4 = "Standard_D32d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48dV4 = "Standard_D48d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4dV4 = "Standard_D4d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64dV4 = "Standard_D64d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8dV4 = "Standard_D8d_v4"; + } + + public static partial class StandardDDv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16dV5 = "Standard_D16d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2dV5 = "Standard_D2d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32dV5 = "Standard_D32d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48dV5 = "Standard_D48d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4dV5 = "Standard_D4d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64dV5 = "Standard_D64d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8dV5 = "Standard_D8d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96dV5 = "Standard_D96d_v5"; + } + + public static partial class StandardDLDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16ldsV5 = "Standard_D16lds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2ldsV5 = "Standard_D2lds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32ldsV5 = "Standard_D32lds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48ldsV5 = "Standard_D48lds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4ldsV5 = "Standard_D4lds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64ldsV5 = "Standard_D64lds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8ldsV5 = "Standard_D8lds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96ldsV5 = "Standard_D96lds_v5"; + } + + public static partial class StandardDldsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD128ldsV6 = "Standard_D128lds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD16ldsV6 = "Standard_D16lds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2ldsV6 = "Standard_D2lds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32ldsV6 = "Standard_D32lds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48ldsV6 = "Standard_D48lds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4ldsV6 = "Standard_D4lds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64ldsV6 = "Standard_D64lds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8ldsV6 = "Standard_D8lds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96ldsV6 = "Standard_D96lds_v6"; + } + + public static partial class StandardDLSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16lsV5 = "Standard_D16ls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2lsV5 = "Standard_D2ls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32lsV5 = "Standard_D32ls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48lsV5 = "Standard_D48ls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4lsV5 = "Standard_D4ls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64lsV5 = "Standard_D64ls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8lsV5 = "Standard_D8ls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96lsV5 = "Standard_D96ls_v5"; + } + + public static partial class StandardDlsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD128lsV6 = "Standard_D128ls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD16lsV6 = "Standard_D16ls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2lsV6 = "Standard_D2ls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32lsV6 = "Standard_D32ls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48lsV6 = "Standard_D48ls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4lsV6 = "Standard_D4ls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64lsV6 = "Standard_D64ls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8lsV6 = "Standard_D8ls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96lsV6 = "Standard_D96ls_v6"; + } + + public static partial class StandardDPDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16pdsV5 = "Standard_D16pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2pdsV5 = "Standard_D2pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32pdsV5 = "Standard_D32pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48pdsV5 = "Standard_D48pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4pdsV5 = "Standard_D4pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64pdsV5 = "Standard_D64pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8pdsV5 = "Standard_D8pds_v5"; + } + + public static partial class StandardDpdsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16pdsV6 = "Standard_D16pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2pdsV6 = "Standard_D2pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32pdsV6 = "Standard_D32pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48pdsV6 = "Standard_D48pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4pdsV6 = "Standard_D4pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64pdsV6 = "Standard_D64pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8pdsV6 = "Standard_D8pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96pdsV6 = "Standard_D96pds_v6"; + } + + public static partial class StandardDPLDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16pldsV5 = "Standard_D16plds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2pldsV5 = "Standard_D2plds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32pldsV5 = "Standard_D32plds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48pldsV5 = "Standard_D48plds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4pldsV5 = "Standard_D4plds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64pldsV5 = "Standard_D64plds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8pldsV5 = "Standard_D8plds_v5"; + } + + public static partial class StandardDpldsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16pldsV6 = "Standard_D16plds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2pldsV6 = "Standard_D2plds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32pldsV6 = "Standard_D32plds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48pldsV6 = "Standard_D48plds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4pldsV6 = "Standard_D4plds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64pldsV6 = "Standard_D64plds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8pldsV6 = "Standard_D8plds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96pldsV6 = "Standard_D96plds_v6"; + } + + public static partial class StandardDPLSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16plsV5 = "Standard_D16pls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2plsV5 = "Standard_D2pls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32plsV5 = "Standard_D32pls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48plsV5 = "Standard_D48pls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4plsV5 = "Standard_D4pls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64plsV5 = "Standard_D64pls_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8plsV5 = "Standard_D8pls_v5"; + } + + public static partial class StandardDplsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16plsV6 = "Standard_D16pls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2plsV6 = "Standard_D2pls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32plsV6 = "Standard_D32pls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48plsV6 = "Standard_D48pls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4plsV6 = "Standard_D4pls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64plsV6 = "Standard_D64pls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8plsV6 = "Standard_D8pls_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96plsV6 = "Standard_D96pls_v6"; + } + + public static partial class StandardDPSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16psV5 = "Standard_D16ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2psV5 = "Standard_D2ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32psV5 = "Standard_D32ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48psV5 = "Standard_D48ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4psV5 = "Standard_D4ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64psV5 = "Standard_D64ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8psV5 = "Standard_D8ps_v5"; + } + + public static partial class StandardDpsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16psV6 = "Standard_D16ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2psV6 = "Standard_D2ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32psV6 = "Standard_D32ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48psV6 = "Standard_D48ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4psV6 = "Standard_D4ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64psV6 = "Standard_D64ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8psV6 = "Standard_D8ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96psV6 = "Standard_D96ps_v6"; + } + + public static partial class StandardDS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDS11 = "Standard_DS11"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS12 = "Standard_DS12"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS13 = "Standard_DS13"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS14 = "Standard_DS14"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS2 = "Standard_DS2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS3 = "Standard_DS3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS4 = "Standard_DS4"; + } + + public static partial class StandardDSv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDS111V2 = "Standard_DS11-1_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS11V2 = "Standard_DS11_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS121V2 = "Standard_DS12-1_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS122V2 = "Standard_DS12-2_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS12V2 = "Standard_DS12_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS132V2 = "Standard_DS13-2_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS134V2 = "Standard_DS13-4_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS13V2 = "Standard_DS13_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS144V2 = "Standard_DS14-4_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS148V2 = "Standard_DS14-8_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS14V2 = "Standard_DS14_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS15V2 = "Standard_DS15_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS2V2 = "Standard_DS2_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS3V2 = "Standard_DS3_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS4V2 = "Standard_DS4_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS5V2 = "Standard_DS5_v2"; + } + + public static partial class StandardDSv2Promo + { + [AspireValue("AksNodeVmSizes")] + public const string StandardDS11V2Promo = "Standard_DS11_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS12V2Promo = "Standard_DS12_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS13V2Promo = "Standard_DS13_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS14V2Promo = "Standard_DS14_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS2V2Promo = "Standard_DS2_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS3V2Promo = "Standard_DS3_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS4V2Promo = "Standard_DS4_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardDS5V2Promo = "Standard_DS5_v2_Promo"; + } + + public static partial class StandardDSv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16sV3 = "Standard_D16s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2sV3 = "Standard_D2s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32sV3 = "Standard_D32s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48sV3 = "Standard_D48s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4sV3 = "Standard_D4s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64sV3 = "Standard_D64s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8sV3 = "Standard_D8s_v3"; + } + + public static partial class StandardDSv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16sV4 = "Standard_D16s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2sV4 = "Standard_D2s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32sV4 = "Standard_D32s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48sV4 = "Standard_D48s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4sV4 = "Standard_D4s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64sV4 = "Standard_D64s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8sV4 = "Standard_D8s_v4"; + } + + public static partial class StandardDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16sV5 = "Standard_D16s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2sV5 = "Standard_D2s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32sV5 = "Standard_D32s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48sV5 = "Standard_D48s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4sV5 = "Standard_D4s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64sV5 = "Standard_D64s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8sV5 = "Standard_D8s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96sV5 = "Standard_D96s_v5"; + } + + public static partial class StandardDsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD128sV6 = "Standard_D128s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD16sV6 = "Standard_D16s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD192sV6 = "Standard_D192s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2sV6 = "Standard_D2s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32sV6 = "Standard_D32s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48sV6 = "Standard_D48s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4sV6 = "Standard_D4s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64sV6 = "Standard_D64s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8sV6 = "Standard_D8s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96sV6 = "Standard_D96s_v6"; + } + + public static partial class StandardDv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD11V2 = "Standard_D11_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD12V2 = "Standard_D12_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD13V2 = "Standard_D13_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD14V2 = "Standard_D14_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD15V2 = "Standard_D15_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2V2 = "Standard_D2_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD3V2 = "Standard_D3_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4V2 = "Standard_D4_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD5V2 = "Standard_D5_v2"; + } + + public static partial class StandardDv2Promo + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD11V2Promo = "Standard_D11_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD12V2Promo = "Standard_D12_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD13V2Promo = "Standard_D13_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD14V2Promo = "Standard_D14_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2V2Promo = "Standard_D2_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD3V2Promo = "Standard_D3_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4V2Promo = "Standard_D4_v2_Promo"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD5V2Promo = "Standard_D5_v2_Promo"; + } + + public static partial class StandardDv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16V3 = "Standard_D16_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2V3 = "Standard_D2_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32V3 = "Standard_D32_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48V3 = "Standard_D48_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4V3 = "Standard_D4_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64V3 = "Standard_D64_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8V3 = "Standard_D8_v3"; + } + + public static partial class StandardDv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16V4 = "Standard_D16_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2V4 = "Standard_D2_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32V4 = "Standard_D32_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48V4 = "Standard_D48_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4V4 = "Standard_D4_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64V4 = "Standard_D64_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8V4 = "Standard_D8_v4"; + } + + public static partial class StandardDv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardD16V5 = "Standard_D16_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD2V5 = "Standard_D2_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD32V5 = "Standard_D32_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD48V5 = "Standard_D48_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD4V5 = "Standard_D4_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD64V5 = "Standard_D64_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD8V5 = "Standard_D8_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardD96V5 = "Standard_D96_v5"; + } + + public static partial class StandardEADSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE164adsV5 = "Standard_E16-4ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168adsV5 = "Standard_E16-8ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16adsV5 = "Standard_E16ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20adsV5 = "Standard_E20ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2adsV5 = "Standard_E2ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216adsV5 = "Standard_E32-16ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328adsV5 = "Standard_E32-8ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32adsV5 = "Standard_E32ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42adsV5 = "Standard_E4-2ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48adsV5 = "Standard_E48ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4adsV5 = "Standard_E4ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416adsV5 = "Standard_E64-16ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432adsV5 = "Standard_E64-32ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64adsV5 = "Standard_E64ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82adsV5 = "Standard_E8-2ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84adsV5 = "Standard_E8-4ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8adsV5 = "Standard_E8ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624adsV5 = "Standard_E96-24ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648adsV5 = "Standard_E96-48ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96adsV5 = "Standard_E96ads_v5"; + } + + public static partial class StandardEadsv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE12832adsV7 = "Standard_E128-32ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE12864adsV7 = "Standard_E128-64ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE128adsV7 = "Standard_E128ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE160adsV7 = "Standard_E160ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE164adsV7 = "Standard_E16-4ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168adsV7 = "Standard_E16-8ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16adsV7 = "Standard_E16ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2adsV7 = "Standard_E2ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216adsV7 = "Standard_E32-16ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328adsV7 = "Standard_E32-8ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32adsV7 = "Standard_E32ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42adsV7 = "Standard_E4-2ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48adsV7 = "Standard_E48ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4adsV7 = "Standard_E4ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416adsV7 = "Standard_E64-16ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432adsV7 = "Standard_E64-32ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64adsV7 = "Standard_E64ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82adsV7 = "Standard_E8-2ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84adsV7 = "Standard_E8-4ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8adsV7 = "Standard_E8ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624adsV7 = "Standard_E96-24ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648adsV7 = "Standard_E96-48ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96adsV7 = "Standard_E96ads_v7"; + } + + public static partial class StandardEadv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16adsV6 = "Standard_E16ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20adsV6 = "Standard_E20ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2adsV6 = "Standard_E2ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32adsV6 = "Standard_E32ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48adsV6 = "Standard_E48ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4adsV6 = "Standard_E4ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64adsV6 = "Standard_E64ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8adsV6 = "Standard_E8ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624adsV6 = "Standard_E96-24ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648adsV6 = "Standard_E96-48ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96adsV6 = "Standard_E96ads_v6"; + } + + public static partial class StandardEASv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE164asV4 = "Standard_E16-4as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168asV4 = "Standard_E16-8as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16asV4 = "Standard_E16as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20asV4 = "Standard_E20as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2asV4 = "Standard_E2as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216asV4 = "Standard_E32-16as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328asV4 = "Standard_E32-8as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32asV4 = "Standard_E32as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42asV4 = "Standard_E4-2as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48asV4 = "Standard_E48as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4asV4 = "Standard_E4as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416asV4 = "Standard_E64-16as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432asV4 = "Standard_E64-32as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64asV4 = "Standard_E64as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82asV4 = "Standard_E8-2as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84asV4 = "Standard_E8-4as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8asV4 = "Standard_E8as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624asV4 = "Standard_E96-24as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648asV4 = "Standard_E96-48as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96asV4 = "Standard_E96as_v4"; + } + + public static partial class StandardEASv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE164asV5 = "Standard_E16-4as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168asV5 = "Standard_E16-8as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16asV5 = "Standard_E16as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20asV5 = "Standard_E20as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2asV5 = "Standard_E2as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216asV5 = "Standard_E32-16as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328asV5 = "Standard_E32-8as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32asV5 = "Standard_E32as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42asV5 = "Standard_E4-2as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48asV5 = "Standard_E48as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4asV5 = "Standard_E4as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416asV5 = "Standard_E64-16as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432asV5 = "Standard_E64-32as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64asV5 = "Standard_E64as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82asV5 = "Standard_E8-2as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84asV5 = "Standard_E8-4as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8asV5 = "Standard_E8as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624asV5 = "Standard_E96-24as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648asV5 = "Standard_E96-48as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96asV5 = "Standard_E96as_v5"; + } + + public static partial class StandardEasv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE12832asV7 = "Standard_E128-32as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE12864asV7 = "Standard_E128-64as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE128asV7 = "Standard_E128as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE160asV7 = "Standard_E160as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE164asV7 = "Standard_E16-4as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168asV7 = "Standard_E16-8as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16asV7 = "Standard_E16as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2asV7 = "Standard_E2as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216asV7 = "Standard_E32-16as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328asV7 = "Standard_E32-8as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32asV7 = "Standard_E32as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42asV7 = "Standard_E4-2as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48asV7 = "Standard_E48as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4asV7 = "Standard_E4as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416asV7 = "Standard_E64-16as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432asV7 = "Standard_E64-32as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64asV7 = "Standard_E64as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82asV7 = "Standard_E8-2as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84asV7 = "Standard_E8-4as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8asV7 = "Standard_E8as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624asV7 = "Standard_E96-24as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648asV7 = "Standard_E96-48as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96asV7 = "Standard_E96as_v7"; + } + + public static partial class StandardEAv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16aV4 = "Standard_E16a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20aV4 = "Standard_E20a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2aV4 = "Standard_E2a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32aV4 = "Standard_E32a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48aV4 = "Standard_E48a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4aV4 = "Standard_E4a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64aV4 = "Standard_E64a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8aV4 = "Standard_E8a_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96aV4 = "Standard_E96a_v4"; + } + + public static partial class StandardEav6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16asV6 = "Standard_E16as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20asV6 = "Standard_E20as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2asV6 = "Standard_E2as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32asV6 = "Standard_E32as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48asV6 = "Standard_E48as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4asV6 = "Standard_E4as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64asV6 = "Standard_E64as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8asV6 = "Standard_E8as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96asV6 = "Standard_E96as_v6"; + } + + public static partial class StandardEBDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16bdsV5 = "Standard_E16bds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2bdsV5 = "Standard_E2bds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32bdsV5 = "Standard_E32bds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48bdsV5 = "Standard_E48bds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4bdsV5 = "Standard_E4bds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64bdsV5 = "Standard_E64bds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8bdsV5 = "Standard_E8bds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96bdsV5 = "Standard_E96bds_v5"; + } + + public static partial class StandardEBSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16bsV5 = "Standard_E16bs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2bsV5 = "Standard_E2bs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32bsV5 = "Standard_E32bs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48bsV5 = "Standard_E48bs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4bsV5 = "Standard_E4bs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64bsV5 = "Standard_E64bs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8bsV5 = "Standard_E8bs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96bsV5 = "Standard_E96bs_v5"; + } + + public static partial class StandardECACCV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16asCcV5 = "Standard_EC16as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC20asCcV5 = "Standard_EC20as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32asCcV5 = "Standard_EC32as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48asCcV5 = "Standard_EC48as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4asCcV5 = "Standard_EC4as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64asCcV5 = "Standard_EC64as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8asCcV5 = "Standard_EC8as_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC96asCcV5 = "Standard_EC96as_cc_v5"; + } + + public static partial class StandardECADCCV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16adsCcV5 = "Standard_EC16ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC20adsCcV5 = "Standard_EC20ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32adsCcV5 = "Standard_EC32ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48adsCcV5 = "Standard_EC48ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4adsCcV5 = "Standard_EC4ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64adsCcV5 = "Standard_EC64ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8adsCcV5 = "Standard_EC8ads_cc_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC96adsCcV5 = "Standard_EC96ads_cc_v5"; + } + + public static partial class StandardECADSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16adsV5 = "Standard_EC16ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC20adsV5 = "Standard_EC20ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC2adsV5 = "Standard_EC2ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32adsV5 = "Standard_EC32ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48adsV5 = "Standard_EC48ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4adsV5 = "Standard_EC4ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64adsV5 = "Standard_EC64ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8adsV5 = "Standard_EC8ads_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC96adsV5 = "Standard_EC96ads_v5"; + } + + public static partial class StandardECadsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16adsV6 = "Standard_EC16ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC2adsV6 = "Standard_EC2ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32adsV6 = "Standard_EC32ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48adsV6 = "Standard_EC48ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4adsV6 = "Standard_EC4ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64adsV6 = "Standard_EC64ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8adsV6 = "Standard_EC8ads_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC96adsV6 = "Standard_EC96ads_v6"; + } + + public static partial class StandardECASv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16asV5 = "Standard_EC16as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC20asV5 = "Standard_EC20as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC2asV5 = "Standard_EC2as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32asV5 = "Standard_EC32as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48asV5 = "Standard_EC48as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4asV5 = "Standard_EC4as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64asV5 = "Standard_EC64as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8asV5 = "Standard_EC8as_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC96asV5 = "Standard_EC96as_v5"; + } + + public static partial class StandardECasv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16asV6 = "Standard_EC16as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC2asV6 = "Standard_EC2as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32asV6 = "Standard_EC32as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48asV6 = "Standard_EC48as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4asV6 = "Standard_EC4as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64asV6 = "Standard_EC64as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8asV6 = "Standard_EC8as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC96asV6 = "Standard_EC96as_v6"; + } + + public static partial class StandardECEDV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC128edsV5 = "Standard_EC128eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16edsV5 = "Standard_EC16eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC2edsV5 = "Standard_EC2eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32edsV5 = "Standard_EC32eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48edsV5 = "Standard_EC48eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4edsV5 = "Standard_EC4eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64edsV5 = "Standard_EC64eds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8edsV5 = "Standard_EC8eds_v5"; + } + + public static partial class StandardECEDV6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16edsV6 = "Standard_EC16eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC2edsV6 = "Standard_EC2eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32edsV6 = "Standard_EC32eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48edsV6 = "Standard_EC48eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4edsV6 = "Standard_EC4eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64edsV6 = "Standard_EC64eds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8edsV6 = "Standard_EC8eds_v6"; + } + + public static partial class StandardECEV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC128esV5 = "Standard_EC128es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16esV5 = "Standard_EC16es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC2esV5 = "Standard_EC2es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32esV5 = "Standard_EC32es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48esV5 = "Standard_EC48es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4esV5 = "Standard_EC4es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64esV5 = "Standard_EC64es_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8esV5 = "Standard_EC8es_v5"; + } + + public static partial class StandardECEV6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC16esV6 = "Standard_EC16es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC2esV6 = "Standard_EC2es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC32esV6 = "Standard_EC32es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC48esV6 = "Standard_EC48es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC4esV6 = "Standard_EC4es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC64esV6 = "Standard_EC64es_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardEC8esV6 = "Standard_EC8es_v6"; + } + + public static partial class StandardECIADSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC96iadsV5 = "Standard_EC96iads_v5"; + } + + public static partial class StandardECIASv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC96iasV5 = "Standard_EC96ias_v5"; + } + + public static partial class StandardECIEDV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC128iedsV5 = "Standard_EC128ieds_v5"; + } + + public static partial class StandardECIEV5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardEC128iesV5 = "Standard_EC128ies_v5"; + } + + public static partial class StandardEDSv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE164dsV4 = "Standard_E16-4ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168dsV4 = "Standard_E16-8ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16dsV4 = "Standard_E16ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20dsV4 = "Standard_E20ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2dsV4 = "Standard_E2ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216dsV4 = "Standard_E32-16ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328dsV4 = "Standard_E32-8ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32dsV4 = "Standard_E32ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42dsV4 = "Standard_E4-2ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48dsV4 = "Standard_E48ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4dsV4 = "Standard_E4ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416dsV4 = "Standard_E64-16ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432dsV4 = "Standard_E64-32ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64dsV4 = "Standard_E64ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82dsV4 = "Standard_E8-2ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84dsV4 = "Standard_E8-4ds_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8dsV4 = "Standard_E8ds_v4"; + } + + public static partial class StandardEDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE164dsV5 = "Standard_E16-4ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168dsV5 = "Standard_E16-8ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16dsV5 = "Standard_E16ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20dsV5 = "Standard_E20ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2dsV5 = "Standard_E2ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216dsV5 = "Standard_E32-16ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328dsV5 = "Standard_E32-8ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32dsV5 = "Standard_E32ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42dsV5 = "Standard_E4-2ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48dsV5 = "Standard_E48ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4dsV5 = "Standard_E4ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416dsV5 = "Standard_E64-16ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432dsV5 = "Standard_E64-32ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64dsV5 = "Standard_E64ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82dsV5 = "Standard_E8-2ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84dsV5 = "Standard_E8-4ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8dsV5 = "Standard_E8ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624dsV5 = "Standard_E96-24ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648dsV5 = "Standard_E96-48ds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96dsV5 = "Standard_E96ds_v5"; + } + + public static partial class StandardEdsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE12832dsV6 = "Standard_E128-32ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE12864dsV6 = "Standard_E128-64ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE128dsV6 = "Standard_E128ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE164dsV6 = "Standard_E16-4ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168dsV6 = "Standard_E16-8ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16dsV6 = "Standard_E16ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE192idsV6 = "Standard_E192ids_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20dsV6 = "Standard_E20ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2dsV6 = "Standard_E2ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216dsV6 = "Standard_E32-16ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328dsV6 = "Standard_E32-8ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32dsV6 = "Standard_E32ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42dsV6 = "Standard_E4-2ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48dsV6 = "Standard_E48ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4dsV6 = "Standard_E4ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416dsV6 = "Standard_E64-16ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432dsV6 = "Standard_E64-32ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64dsV6 = "Standard_E64ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82dsV6 = "Standard_E8-2ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84dsV6 = "Standard_E8-4ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8dsV6 = "Standard_E8ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624dsV6 = "Standard_E96-24ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648dsV6 = "Standard_E96-48ds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96dsV6 = "Standard_E96ds_v6"; + } + + public static partial class StandardEDv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16dV4 = "Standard_E16d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20dV4 = "Standard_E20d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2dV4 = "Standard_E2d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32dV4 = "Standard_E32d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48dV4 = "Standard_E48d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4dV4 = "Standard_E4d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64dV4 = "Standard_E64d_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8dV4 = "Standard_E8d_v4"; + } + + public static partial class StandardEDv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16dV5 = "Standard_E16d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20dV5 = "Standard_E20d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2dV5 = "Standard_E2d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32dV5 = "Standard_E32d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48dV5 = "Standard_E48d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4dV5 = "Standard_E4d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64dV5 = "Standard_E64d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8dV5 = "Standard_E8d_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96dV5 = "Standard_E96d_v5"; + } + + public static partial class StandardEIADSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE112iadsV5 = "Standard_E112iads_v5"; + } + + public static partial class StandardEIASv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE96iasV4 = "Standard_E96ias_v4"; + } + + public static partial class StandardEIASv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE112iasV5 = "Standard_E112ias_v5"; + } + + public static partial class StandardEIBDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE112ibdsV5 = "Standard_E112ibds_v5"; + } + + public static partial class StandardEIBSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE112ibsV5 = "Standard_E112ibs_v5"; + } + + public static partial class StandardEIDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE104idsV5 = "Standard_E104ids_v5"; + } + + public static partial class StandardEIDv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE104idV5 = "Standard_E104id_v5"; + } + + public static partial class StandardEISv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE64isV3 = "Standard_E64is_v3"; + } + + public static partial class StandardEISv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE104isV5 = "Standard_E104is_v5"; + } + + public static partial class StandardEIv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE64iV3 = "Standard_E64i_v3"; + } + + public static partial class StandardEIv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE104iV5 = "Standard_E104i_v5"; + } + + public static partial class StandardEPDSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16pdsV5 = "Standard_E16pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20pdsV5 = "Standard_E20pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2pdsV5 = "Standard_E2pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32pdsV5 = "Standard_E32pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4pdsV5 = "Standard_E4pds_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8pdsV5 = "Standard_E8pds_v5"; + } + + public static partial class StandardEpdsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16pdsV6 = "Standard_E16pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2pdsV6 = "Standard_E2pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32pdsV6 = "Standard_E32pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48pdsV6 = "Standard_E48pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4pdsV6 = "Standard_E4pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64pdsV6 = "Standard_E64pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8pdsV6 = "Standard_E8pds_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96pdsV6 = "Standard_E96pds_v6"; + } + + public static partial class StandardEPSv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16psV5 = "Standard_E16ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20psV5 = "Standard_E20ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2psV5 = "Standard_E2ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32psV5 = "Standard_E32ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4psV5 = "Standard_E4ps_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8psV5 = "Standard_E8ps_v5"; + } + + public static partial class StandardEpsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16psV6 = "Standard_E16ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2psV6 = "Standard_E2ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32psV6 = "Standard_E32ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48psV6 = "Standard_E48ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4psV6 = "Standard_E4ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64psV6 = "Standard_E64ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8psV6 = "Standard_E8ps_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96psV6 = "Standard_E96ps_v6"; + } + + public static partial class StandardESv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE164sV3 = "Standard_E16-4s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168sV3 = "Standard_E16-8s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16sV3 = "Standard_E16s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20sV3 = "Standard_E20s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2sV3 = "Standard_E2s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216sV3 = "Standard_E32-16s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328sV3 = "Standard_E32-8s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32sV3 = "Standard_E32s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42sV3 = "Standard_E4-2s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48sV3 = "Standard_E48s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4sV3 = "Standard_E4s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416sV3 = "Standard_E64-16s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432sV3 = "Standard_E64-32s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64sV3 = "Standard_E64s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82sV3 = "Standard_E8-2s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84sV3 = "Standard_E8-4s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8sV3 = "Standard_E8s_v3"; + } + + public static partial class StandardESv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE164sV4 = "Standard_E16-4s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168sV4 = "Standard_E16-8s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16sV4 = "Standard_E16s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20sV4 = "Standard_E20s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2sV4 = "Standard_E2s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216sV4 = "Standard_E32-16s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328sV4 = "Standard_E32-8s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32sV4 = "Standard_E32s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42sV4 = "Standard_E4-2s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48sV4 = "Standard_E48s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4sV4 = "Standard_E4s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416sV4 = "Standard_E64-16s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432sV4 = "Standard_E64-32s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64sV4 = "Standard_E64s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82sV4 = "Standard_E8-2s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84sV4 = "Standard_E8-4s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8sV4 = "Standard_E8s_v4"; + } + + public static partial class StandardESv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE164sV5 = "Standard_E16-4s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168sV5 = "Standard_E16-8s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16sV5 = "Standard_E16s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20sV5 = "Standard_E20s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2sV5 = "Standard_E2s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216sV5 = "Standard_E32-16s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328sV5 = "Standard_E32-8s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32sV5 = "Standard_E32s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42sV5 = "Standard_E4-2s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48sV5 = "Standard_E48s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4sV5 = "Standard_E4s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416sV5 = "Standard_E64-16s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432sV5 = "Standard_E64-32s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64sV5 = "Standard_E64s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82sV5 = "Standard_E8-2s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84sV5 = "Standard_E8-4s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8sV5 = "Standard_E8s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624sV5 = "Standard_E96-24s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648sV5 = "Standard_E96-48s_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96sV5 = "Standard_E96s_v5"; + } + + public static partial class StandardEsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE12832sV6 = "Standard_E128-32s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE12864sV6 = "Standard_E128-64s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE128sV6 = "Standard_E128s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE164sV6 = "Standard_E16-4s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE168sV6 = "Standard_E16-8s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE16sV6 = "Standard_E16s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE192isV6 = "Standard_E192is_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20sV6 = "Standard_E20s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2sV6 = "Standard_E2s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE3216sV6 = "Standard_E32-16s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE328sV6 = "Standard_E32-8s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32sV6 = "Standard_E32s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE42sV6 = "Standard_E4-2s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48sV6 = "Standard_E48s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4sV6 = "Standard_E4s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6416sV6 = "Standard_E64-16s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE6432sV6 = "Standard_E64-32s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64sV6 = "Standard_E64s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE82sV6 = "Standard_E8-2s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE84sV6 = "Standard_E8-4s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8sV6 = "Standard_E8s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9624sV6 = "Standard_E96-24s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE9648sV6 = "Standard_E96-48s_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96sV6 = "Standard_E96s_v6"; + } + + public static partial class StandardEv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16V3 = "Standard_E16_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20V3 = "Standard_E20_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2V3 = "Standard_E2_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32V3 = "Standard_E32_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48V3 = "Standard_E48_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4V3 = "Standard_E4_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64V3 = "Standard_E64_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8V3 = "Standard_E8_v3"; + } + + public static partial class StandardEv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16V4 = "Standard_E16_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20V4 = "Standard_E20_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2V4 = "Standard_E2_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32V4 = "Standard_E32_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48V4 = "Standard_E48_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4V4 = "Standard_E4_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64V4 = "Standard_E64_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8V4 = "Standard_E8_v4"; + } + + public static partial class StandardEv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE16V5 = "Standard_E16_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE20V5 = "Standard_E20_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE2V5 = "Standard_E2_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE32V5 = "Standard_E32_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE48V5 = "Standard_E48_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE4V5 = "Standard_E4_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE64V5 = "Standard_E64_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE8V5 = "Standard_E8_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardE96V5 = "Standard_E96_v5"; + } + + public static partial class StandardF + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16 = "Standard_F16"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2 = "Standard_F2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4 = "Standard_F4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8 = "Standard_F8"; + } + + public static partial class StandardFadsv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16adsV7 = "Standard_F16ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2adsV7 = "Standard_F2ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32adsV7 = "Standard_F32ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48adsV7 = "Standard_F48ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4adsV7 = "Standard_F4ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64adsV7 = "Standard_F64ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF80adsV7 = "Standard_F80ads_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8adsV7 = "Standard_F8ads_v7"; + } + + public static partial class StandardFaldsv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16aldsV7 = "Standard_F16alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2aldsV7 = "Standard_F2alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32aldsV7 = "Standard_F32alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48aldsV7 = "Standard_F48alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4aldsV7 = "Standard_F4alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64aldsV7 = "Standard_F64alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF80aldsV7 = "Standard_F80alds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8aldsV7 = "Standard_F8alds_v7"; + } + + public static partial class StandardFalsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16alsV6 = "Standard_F16als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2alsV6 = "Standard_F2als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32alsV6 = "Standard_F32als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48alsV6 = "Standard_F48als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4alsV6 = "Standard_F4als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64alsV6 = "Standard_F64als_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8alsV6 = "Standard_F8als_v6"; + } + + public static partial class StandardFalsv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16alsV7 = "Standard_F16als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2alsV7 = "Standard_F2als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32alsV7 = "Standard_F32als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48alsV7 = "Standard_F48als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4alsV7 = "Standard_F4als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64alsV7 = "Standard_F64als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF80alsV7 = "Standard_F80als_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8alsV7 = "Standard_F8als_v7"; + } + + public static partial class StandardFamdsv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF164amdsV7 = "Standard_F16-4amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF168amdsV7 = "Standard_F16-8amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF16amdsV7 = "Standard_F16amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF21amdsV7 = "Standard_F2-1amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2amdsV7 = "Standard_F2amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF3216amdsV7 = "Standard_F32-16amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF328amdsV7 = "Standard_F32-8amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32amdsV7 = "Standard_F32amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF41amdsV7 = "Standard_F4-1amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF42amdsV7 = "Standard_F4-2amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48amdsV7 = "Standard_F48amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4amdsV7 = "Standard_F4amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF6416amdsV7 = "Standard_F64-16amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF6432amdsV7 = "Standard_F64-32amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64amdsV7 = "Standard_F64amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF80amdsV7 = "Standard_F80amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF82amdsV7 = "Standard_F8-2amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF84amdsV7 = "Standard_F8-4amds_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8amdsV7 = "Standard_F8amds_v7"; + } + + public static partial class StandardFamsv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16amsV6 = "Standard_F16ams_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2amsV6 = "Standard_F2ams_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32amsV6 = "Standard_F32ams_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48amsV6 = "Standard_F48ams_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4amsV6 = "Standard_F4ams_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64amsV6 = "Standard_F64ams_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8amsV6 = "Standard_F8ams_v6"; + } + + public static partial class StandardFamsv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF164amsV7 = "Standard_F16-4ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF168amsV7 = "Standard_F16-8ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF16amsV7 = "Standard_F16ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF21amsV7 = "Standard_F2-1ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2amsV7 = "Standard_F2ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF3216amsV7 = "Standard_F32-16ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF328amsV7 = "Standard_F32-8ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32amsV7 = "Standard_F32ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF41amsV7 = "Standard_F4-1ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF42amsV7 = "Standard_F4-2ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48amsV7 = "Standard_F48ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4amsV7 = "Standard_F4ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF6416amsV7 = "Standard_F64-16ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF6432amsV7 = "Standard_F64-32ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64amsV7 = "Standard_F64ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF80amsV7 = "Standard_F80ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF82amsV7 = "Standard_F8-2ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF84amsV7 = "Standard_F8-4ams_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8amsV7 = "Standard_F8ams_v7"; + } + + public static partial class StandardFasv6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16asV6 = "Standard_F16as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2asV6 = "Standard_F2as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32asV6 = "Standard_F32as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48asV6 = "Standard_F48as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4asV6 = "Standard_F4as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64asV6 = "Standard_F64as_v6"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8asV6 = "Standard_F8as_v6"; + } + + public static partial class StandardFasv7 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16asV7 = "Standard_F16as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2asV7 = "Standard_F2as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32asV7 = "Standard_F32as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48asV7 = "Standard_F48as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4asV7 = "Standard_F4as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64asV7 = "Standard_F64as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF80asV7 = "Standard_F80as_v7"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8asV7 = "Standard_F8as_v7"; + } + + public static partial class StandardFS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16s = "Standard_F16s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2s = "Standard_F2s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4s = "Standard_F4s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8s = "Standard_F8s"; + } + + public static partial class StandardFSv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardF16sV2 = "Standard_F16s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF2sV2 = "Standard_F2s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF32sV2 = "Standard_F32s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF48sV2 = "Standard_F48s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF4sV2 = "Standard_F4s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF64sV2 = "Standard_F64s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF72sV2 = "Standard_F72s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardF8sV2 = "Standard_F8s_v2"; + } + + public static partial class StandardFXmdsv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardFX126mdsV2 = "Standard_FX12-6mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX12mdsV2 = "Standard_FX12mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX164mdsV2 = "Standard_FX16-4mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX168mdsV2 = "Standard_FX16-8mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX16mdsV2 = "Standard_FX16mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX2412mdsV2 = "Standard_FX24-12mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX246mdsV2 = "Standard_FX24-6mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX24mdsV2 = "Standard_FX24mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX2mdsV2 = "Standard_FX2mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX3216mdsV2 = "Standard_FX32-16mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX328mdsV2 = "Standard_FX32-8mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX32mdsV2 = "Standard_FX32mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX42mdsV2 = "Standard_FX4-2mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX4812mdsV2 = "Standard_FX48-12mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX4824mdsV2 = "Standard_FX48-24mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX48mdsV2 = "Standard_FX48mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX4mdsV2 = "Standard_FX4mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX6416mdsV2 = "Standard_FX64-16mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX6432mdsV2 = "Standard_FX64-32mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX64mdsV2 = "Standard_FX64mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX82mdsV2 = "Standard_FX8-2mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX84mdsV2 = "Standard_FX8-4mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX8mdsV2 = "Standard_FX8mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX9624mdsV2 = "Standard_FX96-24mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX9648mdsV2 = "Standard_FX96-48mds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX96mdsV2 = "Standard_FX96mds_v2"; + } + + public static partial class StandardFXMDVS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardFX12mds = "Standard_FX12mds"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX24mds = "Standard_FX24mds"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX36mds = "Standard_FX36mds"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX48mds = "Standard_FX48mds"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX4mds = "Standard_FX4mds"; + } + + public static partial class StandardFXmsv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardFX126msV2 = "Standard_FX12-6ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX12msV2 = "Standard_FX12ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX164msV2 = "Standard_FX16-4ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX168msV2 = "Standard_FX16-8ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX16msV2 = "Standard_FX16ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX2412msV2 = "Standard_FX24-12ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX246msV2 = "Standard_FX24-6ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX24msV2 = "Standard_FX24ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX2msV2 = "Standard_FX2ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX3216msV2 = "Standard_FX32-16ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX328msV2 = "Standard_FX32-8ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX32msV2 = "Standard_FX32ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX42msV2 = "Standard_FX4-2ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX4812msV2 = "Standard_FX48-12ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX4824msV2 = "Standard_FX48-24ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX48msV2 = "Standard_FX48ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX4msV2 = "Standard_FX4ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX6416msV2 = "Standard_FX64-16ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX6432msV2 = "Standard_FX64-32ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX64msV2 = "Standard_FX64ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX82msV2 = "Standard_FX8-2ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX84msV2 = "Standard_FX8-4ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX8msV2 = "Standard_FX8ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX9624msV2 = "Standard_FX96-24ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX9648msV2 = "Standard_FX96-48ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardFX96msV2 = "Standard_FX96ms_v2"; + } + + public static partial class StandardG + { + [AspireValue("AksNodeVmSizes")] + public const string StandardG1 = "Standard_G1"; + [AspireValue("AksNodeVmSizes")] + public const string StandardG2 = "Standard_G2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardG3 = "Standard_G3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardG4 = "Standard_G4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardG5 = "Standard_G5"; + } + + public static partial class StandardGS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardGS1 = "Standard_GS1"; + [AspireValue("AksNodeVmSizes")] + public const string StandardGS2 = "Standard_GS2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardGS3 = "Standard_GS3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardGS4 = "Standard_GS4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardGS44 = "Standard_GS4-4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardGS48 = "Standard_GS4-8"; + [AspireValue("AksNodeVmSizes")] + public const string StandardGS5 = "Standard_GS5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardGS516 = "Standard_GS5-16"; + [AspireValue("AksNodeVmSizes")] + public const string StandardGS58 = "Standard_GS5-8"; + } + + public static partial class StandardHBrsv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardHB12016rsV2 = "Standard_HB120-16rs_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB12032rsV2 = "Standard_HB120-32rs_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB12064rsV2 = "Standard_HB120-64rs_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB12096rsV2 = "Standard_HB120-96rs_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB120rsV2 = "Standard_HB120rs_v2"; + } + + public static partial class StandardHBv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardHB12016rsV3 = "Standard_HB120-16rs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB12032rsV3 = "Standard_HB120-32rs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB12064rsV3 = "Standard_HB120-64rs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB12096rsV3 = "Standard_HB120-96rs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB120rsV3 = "Standard_HB120rs_v3"; + } + + public static partial class StandardHBv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardHB176144rsV4 = "Standard_HB176-144rs_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB17624rsV4 = "Standard_HB176-24rs_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB17648rsV4 = "Standard_HB176-48rs_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB17696rsV4 = "Standard_HB176-96rs_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB176rsV4 = "Standard_HB176rs_v4"; + } + + public static partial class StandardHBv5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardHB368144rsV5 = "Standard_HB368-144rs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB368192rsV5 = "Standard_HB368-192rs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB368240rsV5 = "Standard_HB368-240rs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB368288rsV5 = "Standard_HB368-288rs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB368336rsV5 = "Standard_HB368-336rs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB36848rsV5 = "Standard_HB368-48rs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB36896rsV5 = "Standard_HB368-96rs_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHB368rsV5 = "Standard_HB368rs_v5"; + } + + public static partial class StandardHCS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardHC4416rs = "Standard_HC44-16rs"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHC4432rs = "Standard_HC44-32rs"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHC44rs = "Standard_HC44rs"; + } + + public static partial class StandardHX + { + [AspireValue("AksNodeVmSizes")] + public const string StandardHX176144rs = "Standard_HX176-144rs"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHX17624rs = "Standard_HX176-24rs"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHX17648rs = "Standard_HX176-48rs"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHX17696rs = "Standard_HX176-96rs"; + [AspireValue("AksNodeVmSizes")] + public const string StandardHX176rs = "Standard_HX176rs"; + } + + public static partial class StandardLaosv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardL12aosV4 = "Standard_L12aos_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL16aosV4 = "Standard_L16aos_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL24aosV4 = "Standard_L24aos_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL2aosV4 = "Standard_L2aos_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL32aosV4 = "Standard_L32aos_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL4aosV4 = "Standard_L4aos_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL8aosV4 = "Standard_L8aos_v4"; + } + + public static partial class StandardLASv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardL16asV3 = "Standard_L16as_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL32asV3 = "Standard_L32as_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL48asV3 = "Standard_L48as_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL64asV3 = "Standard_L64as_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL80asV3 = "Standard_L80as_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL8asV3 = "Standard_L8as_v3"; + } + + public static partial class StandardLasv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardL16asV4 = "Standard_L16as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL2asV4 = "Standard_L2as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL32asV4 = "Standard_L32as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL48asV4 = "Standard_L48as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL4asV4 = "Standard_L4as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL64asV4 = "Standard_L64as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL80asV4 = "Standard_L80as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL8asV4 = "Standard_L8as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL96asV4 = "Standard_L96as_v4"; + } + + public static partial class StandardLS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardL16s = "Standard_L16s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL32s = "Standard_L32s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL4s = "Standard_L4s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL8s = "Standard_L8s"; + } + + public static partial class StandardLSv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardL16sV2 = "Standard_L16s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL32sV2 = "Standard_L32s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL48sV2 = "Standard_L48s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL64sV2 = "Standard_L64s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL80sV2 = "Standard_L80s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL8sV2 = "Standard_L8s_v2"; + } + + public static partial class StandardLSv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardL16sV3 = "Standard_L16s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL32sV3 = "Standard_L32s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL48sV3 = "Standard_L48s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL64sV3 = "Standard_L64s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL80sV3 = "Standard_L80s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL8sV3 = "Standard_L8s_v3"; + } + + public static partial class StandardLsv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardL16sV4 = "Standard_L16s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL2sV4 = "Standard_L2s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL32sV4 = "Standard_L32s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL48sV4 = "Standard_L48s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL4sV4 = "Standard_L4s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL64sV4 = "Standard_L64s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL80sV4 = "Standard_L80s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL8sV4 = "Standard_L8s_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardL96sV4 = "Standard_L96s_v4"; + } + + public static partial class StandardMBDSMediumMemoryv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM12864bds3V3 = "Standard_M128-64bds_3_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM12864bdsV3 = "Standard_M128-64bds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM128bds3V3 = "Standard_M128bds_3_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM128bdsV3 = "Standard_M128bds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM16bdsV3 = "Standard_M16bds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM17688bds4V3 = "Standard_M176-88bds_4_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM17688bdsV3 = "Standard_M176-88bds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM176bds4V3 = "Standard_M176bds_4_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM176bdsV3 = "Standard_M176bds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM32bdsV3 = "Standard_M32bds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM48bdsV3 = "Standard_M48bds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM6432bds1V3 = "Standard_M64-32bds_1_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64bds1V3 = "Standard_M64bds_1_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64bdsV3 = "Standard_M64bds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM9648bds2V3 = "Standard_M96-48bds_2_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM96bds2V3 = "Standard_M96bds_2_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM96bdsV3 = "Standard_M96bds_v3"; + } + + public static partial class StandardMBSMediumMemoryv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM12864bsV3 = "Standard_M128-64bs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM128bsV3 = "Standard_M128bs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM16bsV3 = "Standard_M16bs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM17688bsV3 = "Standard_M176-88bs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM176bsV3 = "Standard_M176bs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM32bsV3 = "Standard_M32bs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416bsV3 = "Standard_M416bs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM48bsV3 = "Standard_M48bs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64bsV3 = "Standard_M64bs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM96bsV3 = "Standard_M96bs_v3"; + } + + public static partial class StandardMDSHighMemoryv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM416ds6V3 = "Standard_M416ds_6_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416ds8V3 = "Standard_M416ds_8_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM624ds12V3 = "Standard_M624ds_12_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM832ds12V3 = "Standard_M832ds_12_v3"; + } + + public static partial class StandardMDSMediumMemoryv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM128dmsV2 = "Standard_M128dms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM128dsV2 = "Standard_M128ds_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM32dmsV2 = "Standard_M32dms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64dmsV2 = "Standard_M64dms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64dsV2 = "Standard_M64ds_v2"; + } + + public static partial class StandardMDSMediumMemoryv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM12dsV3 = "Standard_M12ds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM176ds3V3 = "Standard_M176ds_3_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM176ds4V3 = "Standard_M176ds_4_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM24dsV3 = "Standard_M24ds_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM48ds1V3 = "Standard_M48ds_1_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM96ds1V3 = "Standard_M96ds_1_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM96ds2V3 = "Standard_M96ds_2_v3"; + } + + public static partial class StandardMIDSHighMemoryv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM832ids16V3 = "Standard_M832ids_16_v3"; + } + + public static partial class StandardMIDSMediumMemoryv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM192idmsV2 = "Standard_M192idms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM192idsV2 = "Standard_M192ids_v2"; + } + + public static partial class StandardMISHighMemoryv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM832is16V3 = "Standard_M832is_16_v3"; + } + + public static partial class StandardMISMediumMemoryv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM192imsV2 = "Standard_M192ims_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM192isV2 = "Standard_M192is_v2"; + } + + public static partial class StandardMS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM128 = "Standard_M128"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM12832ms = "Standard_M128-32ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM12864ms = "Standard_M128-64ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM128m = "Standard_M128m"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM128ms = "Standard_M128ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM128s = "Standard_M128s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM164ms = "Standard_M16-4ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM168ms = "Standard_M16-8ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM16ms = "Standard_M16ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM3216ms = "Standard_M32-16ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM328ms = "Standard_M32-8ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM32ls = "Standard_M32ls"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM32ms = "Standard_M32ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM32ts = "Standard_M32ts"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64 = "Standard_M64"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM6416ms = "Standard_M64-16ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM6432ms = "Standard_M64-32ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64ls = "Standard_M64ls"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64m = "Standard_M64m"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64ms = "Standard_M64ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64s = "Standard_M64s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM82ms = "Standard_M8-2ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM84ms = "Standard_M8-4ms"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM8ms = "Standard_M8ms"; + } + + public static partial class StandardMSHighMemoryv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM416s6V3 = "Standard_M416s_6_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416s8V3 = "Standard_M416s_8_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM624s12V3 = "Standard_M624s_12_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM832s12V3 = "Standard_M832s_12_v3"; + } + + public static partial class StandardMSMediumMemoryv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM128msV2 = "Standard_M128ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM128sV2 = "Standard_M128s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM32msV2 = "Standard_M32ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64msV2 = "Standard_M64ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM64sV2 = "Standard_M64s_v2"; + } + + public static partial class StandardMSMediumMemoryv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM12sV3 = "Standard_M12s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM176s3V3 = "Standard_M176s_3_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM176s4V3 = "Standard_M176s_4_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM24sV3 = "Standard_M24s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM48s1V3 = "Standard_M48s_1_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM96s1V3 = "Standard_M96s_1_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM96s2V3 = "Standard_M96s_2_v3"; + } + + public static partial class StandardMSv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardM208msV2 = "Standard_M208ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM208sV2 = "Standard_M208s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416208msV2 = "Standard_M416-208ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416208sV2 = "Standard_M416-208s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416msV2 = "Standard_M416ms_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416s10V2 = "Standard_M416s_10_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416s8V2 = "Standard_M416s_8_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416s9V2 = "Standard_M416s_9_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardM416sV2 = "Standard_M416s_v2"; + } + + public static partial class StandardNCADSA100v4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNC24adsA100V4 = "Standard_NC24ads_A100_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC48adsA100V4 = "Standard_NC48ads_A100_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC96adsA100V4 = "Standard_NC96ads_A100_v4"; + } + + public static partial class StandardNCADSA10v4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNC16adsA10V4 = "Standard_NC16ads_A10_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC32adsA10V4 = "Standard_NC32ads_A10_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC8adsA10V4 = "Standard_NC8ads_A10_v4"; + } + + public static partial class StandardNCadsH100v5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNC40adsH100V5 = "Standard_NC40ads_H100_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC80adisH100V5 = "Standard_NC80adis_H100_v5"; + } + + public static partial class StandardNCASv3T4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNC16asT4V3 = "Standard_NC16as_T4_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC4asT4V3 = "Standard_NC4as_T4_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC64asT4V3 = "Standard_NC64as_T4_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC8asT4V3 = "Standard_NC8as_T4_v3"; + } + + public static partial class StandardNCCads2023 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNCC40adsH100V5 = "Standard_NCC40ads_H100_v5"; + } + + public static partial class StandardNCSv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNC12sV3 = "Standard_NC12s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC24rsV3 = "Standard_NC24rs_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC24sV3 = "Standard_NC24s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNC6sV3 = "Standard_NC6s_v3"; + } + + public static partial class StandardNDAMSv4A100 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardND96amsrA100V4 = "Standard_ND96amsr_A100_v4"; + } + + public static partial class StandardNDASv4A100 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardND96asrV4 = "Standard_ND96asr_v4"; + } + + public static partial class StandardNDISRGB200V6NDR + { + [AspireValue("AksNodeVmSizes")] + public const string StandardND128isrNDRGB200V6 = "Standard_ND128isr_NDR_GB200_v6"; + } + + public static partial class StandardNDISRGB300V6 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardND128isrGB300V6 = "Standard_ND128isr_GB300_v6"; + } + + public static partial class StandardNDISRH200V5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardND96isrH200V5 = "Standard_ND96isr_H200_v5"; + } + + public static partial class StandardNDISv5MI300X + { + [AspireValue("AksNodeVmSizes")] + public const string StandardND96isMI300XV5 = "Standard_ND96is_MI300X_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardND96isrMI300XV5 = "Standard_ND96isr_MI300X_v5"; + } + + public static partial class StandardNDSH100v5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardND96isrH100V5 = "Standard_ND96isr_H100_v5"; + } + + public static partial class StandardNDSv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardND40rsV2 = "Standard_ND40rs_v2"; + } + + public static partial class StandardNGADSV620v1 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNG16adsV620V1 = "Standard_NG16ads_V620_v1"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNG32admsV620V1 = "Standard_NG32adms_V620_v1"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNG32adsV620V1 = "Standard_NG32ads_V620_v1"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNG8adsV620V1 = "Standard_NG8ads_V620_v1"; + } + + public static partial class StandardNPS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNP10s = "Standard_NP10s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNP20s = "Standard_NP20s"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNP40s = "Standard_NP40s"; + } + + public static partial class StandardNVADSA10v5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNV12adsA10V5 = "Standard_NV12ads_A10_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV18adsA10V5 = "Standard_NV18ads_A10_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV36admsA10V5 = "Standard_NV36adms_A10_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV36adsA10V5 = "Standard_NV36ads_A10_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV6adsA10V5 = "Standard_NV6ads_A10_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV72adsA10V5 = "Standard_NV72ads_A10_v5"; + } + + public static partial class StandardNVadsV710v5 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNV12adsV710V5 = "Standard_NV12ads_V710_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV24adsV710V5 = "Standard_NV24ads_V710_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV28admsV710V5 = "Standard_NV28adms_V710_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV4adsV710V5 = "Standard_NV4ads_V710_v5"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV8adsV710V5 = "Standard_NV8ads_V710_v5"; + } + + public static partial class StandardNVSv2 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNV12sV2 = "Standard_NV12s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV24sV2 = "Standard_NV24s_v2"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV6sV2 = "Standard_NV6s_v2"; + } + + public static partial class StandardNVSv3 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNV12sV3 = "Standard_NV12s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV24sV3 = "Standard_NV24s_v3"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV48sV3 = "Standard_NV48s_v3"; + } + + public static partial class StandardNVSv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardNV16asV4 = "Standard_NV16as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV32asV4 = "Standard_NV32as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV4asV4 = "Standard_NV4as_v4"; + [AspireValue("AksNodeVmSizes")] + public const string StandardNV8asV4 = "Standard_NV8as_v4"; + } + + public static partial class StandardPBS + { + [AspireValue("AksNodeVmSizes")] + public const string StandardPB6s = "Standard_PB6s"; + } + + public static partial class StandardXEIDSv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE80idsV4 = "Standard_E80ids_v4"; + } + + public static partial class StandardXEISv4 + { + [AspireValue("AksNodeVmSizes")] + public const string StandardE80isV4 = "Standard_E80is_v4"; + } + } + + public partial class AzureKubernetesEnvironmentResource : AzureProvisioningResource, IAzureComputeEnvironmentResource, ApplicationModel.IComputeEnvironmentResource, ApplicationModel.IResource, IAzureNspAssociationTarget + { + public AzureKubernetesEnvironmentResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } + + public BicepOutputReference ClusterFqdn { get { throw null; } } + + public BicepOutputReference Id { get { throw null; } } + + public BicepOutputReference KubeletIdentityObjectId { get { throw null; } } + + public BicepOutputReference NameOutputReference { get { throw null; } } + + public BicepOutputReference NodeResourceGroup { get { throw null; } } + + public BicepOutputReference OidcIssuerUrl { get { throw null; } } + } +} \ No newline at end of file diff --git a/src/Aspire.Hosting.Azure.Kusto/api/Aspire.Hosting.Azure.Kusto.cs b/src/Aspire.Hosting.Azure.Kusto/api/Aspire.Hosting.Azure.Kusto.cs index 10f8e4454eb..78f9b62d21d 100644 --- a/src/Aspire.Hosting.Azure.Kusto/api/Aspire.Hosting.Azure.Kusto.cs +++ b/src/Aspire.Hosting.Azure.Kusto/api/Aspire.Hosting.Azure.Kusto.cs @@ -10,19 +10,19 @@ namespace Aspire.Hosting { public static partial class AzureKustoBuilderExtensions { - [AspireExport("addAzureKustoCluster", Description = "Adds an Azure Data Explorer (Kusto) cluster resource")] + [AspireExport(Description = "Adds an Azure Data Explorer (Kusto) cluster resource")] public static ApplicationModel.IResourceBuilder AddAzureKustoCluster(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("addReadWriteDatabase", Description = "Adds a Kusto read-write database resource")] + [AspireExport(Description = "Adds a Kusto read-write database resource")] public static ApplicationModel.IResourceBuilder AddReadWriteDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } - [AspireExport("runAsEmulator", Description = "Configures the Kusto cluster to run using the local emulator", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures the Kusto cluster to run using the local emulator", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsEmulator(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } - [AspireExport("withCreationScript", Description = "Defines the KQL script used to create the database")] + [AspireExport(Description = "Defines the KQL script used to create the database")] public static ApplicationModel.IResourceBuilder WithCreationScript(this ApplicationModel.IResourceBuilder builder, string script) { throw null; } - [AspireExport("withHostPort", Description = "Sets the host port for the Kusto emulator endpoint")] + [AspireExport(Description = "Sets the host port for the Kusto emulator endpoint")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int port) { throw null; } } } @@ -30,7 +30,7 @@ public static partial class AzureKustoBuilderExtensions namespace Aspire.Hosting.Azure { [AspireExport(ExposeProperties = true)] - public partial class AzureKustoClusterResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEndpoints + public partial class AzureKustoClusterResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEndpoints { public AzureKustoClusterResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -59,7 +59,7 @@ public AzureKustoEmulatorResource(AzureKustoClusterResource innerResource) : bas } [AspireExport(ExposeProperties = true)] - public partial class AzureKustoReadWriteDatabaseResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class AzureKustoReadWriteDatabaseResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public AzureKustoReadWriteDatabaseResource(string name, string databaseName, AzureKustoClusterResource kustoParentResource) : base(default!) { } diff --git a/src/Aspire.Hosting.Azure.Network/api/Aspire.Hosting.Azure.Network.cs b/src/Aspire.Hosting.Azure.Network/api/Aspire.Hosting.Azure.Network.cs index 3ebd717cb1d..7ef1291d6b9 100644 --- a/src/Aspire.Hosting.Azure.Network/api/Aspire.Hosting.Azure.Network.cs +++ b/src/Aspire.Hosting.Azure.Network/api/Aspire.Hosting.Azure.Network.cs @@ -10,31 +10,44 @@ namespace Aspire.Hosting { public static partial class AzureNatGatewayExtensions { - [AspireExport("addNatGateway", Description = "Adds an Azure NAT Gateway resource to the application model.")] + [AspireExport(Description = "Adds an Azure NAT Gateway resource to the application model.")] public static ApplicationModel.IResourceBuilder AddNatGateway(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("withPublicIPAddress", Description = "Associates an Azure Public IP Address resource with an Azure NAT Gateway resource.")] + [AspireExport(Description = "Associates an Azure Public IP Address resource with an Azure NAT Gateway resource.")] public static ApplicationModel.IResourceBuilder WithPublicIPAddress(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder publicIPAddress) { throw null; } } public static partial class AzureNetworkSecurityGroupExtensions { - [AspireExport("addNetworkSecurityGroup", Description = "Adds an Azure Network Security Group resource to the application model.")] + [AspireExport(Description = "Adds an Azure Network Security Group resource to the application model.")] public static ApplicationModel.IResourceBuilder AddNetworkSecurityGroup(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("withSecurityRule", Description = "Adds a security rule to an Azure Network Security Group resource.")] + [AspireExport(Description = "Adds a security rule to an Azure Network Security Group resource.")] public static ApplicationModel.IResourceBuilder WithSecurityRule(this ApplicationModel.IResourceBuilder builder, Azure.AzureSecurityRule rule) { throw null; } } + public static partial class AzureNetworkSecurityPerimeterExtensions + { + [AspireExport(Description = "Adds an Azure Network Security Perimeter resource to the application model.")] + public static ApplicationModel.IResourceBuilder AddNetworkSecurityPerimeter(this IDistributedApplicationBuilder builder, string name) { throw null; } + + [AspireExport(Description = "Adds an access rule to an Azure Network Security Perimeter resource.")] + public static ApplicationModel.IResourceBuilder WithAccessRule(this ApplicationModel.IResourceBuilder builder, Azure.AzureNspAccessRule rule) { throw null; } + + [AspireExport("associateWithNetworkSecurityPerimeter", MethodName = "withNetworkSecurityPerimeter", Description = "Associates an Azure PaaS resource with a Network Security Perimeter.")] + public static ApplicationModel.IResourceBuilder WithNetworkSecurityPerimeter(this ApplicationModel.IResourceBuilder target, ApplicationModel.IResourceBuilder nsp, global::Azure.Provisioning.Network.NetworkSecurityPerimeterAssociationAccessMode accessMode = global::Azure.Provisioning.Network.NetworkSecurityPerimeterAssociationAccessMode.Enforced, string? associationName = null) + where T : ApplicationModel.IResource, Azure.IAzureNspAssociationTarget { throw null; } + } + public static partial class AzurePrivateEndpointExtensions { - [AspireExport("addPrivateEndpoint", Description = "Adds an Azure Private Endpoint resource to an Azure subnet resource.")] + [AspireExport(Description = "Adds an Azure Private Endpoint resource to an Azure subnet resource.")] public static ApplicationModel.IResourceBuilder AddPrivateEndpoint(this ApplicationModel.IResourceBuilder subnet, ApplicationModel.IResourceBuilder target) { throw null; } } public static partial class AzurePublicIPAddressExtensions { - [AspireExport("addPublicIPAddress", Description = "Adds an Azure Public IP Address resource to the application model.")] + [AspireExport(Description = "Adds an Azure Public IP Address resource to the application model.")] public static ApplicationModel.IResourceBuilder AddPublicIPAddress(this IDistributedApplicationBuilder builder, string name) { throw null; } } @@ -43,35 +56,35 @@ public static partial class AzureVirtualNetworkExtensions [AspireExport("addAzureVirtualNetworkFromParameter", MethodName = "addAzureVirtualNetwork", Description = "Adds an Azure Virtual Network resource to the application model with a parameterized address prefix.")] public static ApplicationModel.IResourceBuilder AddAzureVirtualNetwork(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder addressPrefix) { throw null; } - [AspireExport("addAzureVirtualNetwork", Description = "Adds an Azure Virtual Network resource to the application model.")] + [AspireExport(Description = "Adds an Azure Virtual Network resource to the application model.")] public static ApplicationModel.IResourceBuilder AddAzureVirtualNetwork(this IDistributedApplicationBuilder builder, string name, string? addressPrefix = null) { throw null; } [AspireExport("addSubnetFromParameter", MethodName = "addSubnet", Description = "Adds an Azure subnet resource with a parameterized address prefix to an Azure Virtual Network resource.")] public static ApplicationModel.IResourceBuilder AddSubnet(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.IResourceBuilder addressPrefix, string? subnetName = null) { throw null; } - [AspireExport("addSubnet", Description = "Adds an Azure subnet resource to an Azure Virtual Network resource.")] + [AspireExport(Description = "Adds an Azure subnet resource to an Azure Virtual Network resource.")] public static ApplicationModel.IResourceBuilder AddSubnet(this ApplicationModel.IResourceBuilder builder, string name, string addressPrefix, string? subnetName = null) { throw null; } - [AspireExport("allowInbound", Description = "Adds an inbound allow rule to the Azure subnet resource's Network Security Group.")] + [AspireExport(Description = "Adds an inbound allow rule to the Azure subnet resource's Network Security Group.")] public static ApplicationModel.IResourceBuilder AllowInbound(this ApplicationModel.IResourceBuilder builder, string? port = null, string? from = null, string? to = null, global::Azure.Provisioning.Network.SecurityRuleProtocol? protocol = null, int? priority = null, string? name = null) { throw null; } - [AspireExport("allowOutbound", Description = "Adds an outbound allow rule to the Azure subnet resource's Network Security Group.")] + [AspireExport(Description = "Adds an outbound allow rule to the Azure subnet resource's Network Security Group.")] public static ApplicationModel.IResourceBuilder AllowOutbound(this ApplicationModel.IResourceBuilder builder, string? port = null, string? from = null, string? to = null, global::Azure.Provisioning.Network.SecurityRuleProtocol? protocol = null, int? priority = null, string? name = null) { throw null; } - [AspireExport("denyInbound", Description = "Adds an inbound deny rule to the Azure subnet resource's Network Security Group.")] + [AspireExport(Description = "Adds an inbound deny rule to the Azure subnet resource's Network Security Group.")] public static ApplicationModel.IResourceBuilder DenyInbound(this ApplicationModel.IResourceBuilder builder, string? port = null, string? from = null, string? to = null, global::Azure.Provisioning.Network.SecurityRuleProtocol? protocol = null, int? priority = null, string? name = null) { throw null; } - [AspireExport("denyOutbound", Description = "Adds an outbound deny rule to the Azure subnet resource's Network Security Group.")] + [AspireExport(Description = "Adds an outbound deny rule to the Azure subnet resource's Network Security Group.")] public static ApplicationModel.IResourceBuilder DenyOutbound(this ApplicationModel.IResourceBuilder builder, string? port = null, string? from = null, string? to = null, global::Azure.Provisioning.Network.SecurityRuleProtocol? protocol = null, int? priority = null, string? name = null) { throw null; } [AspireExport("withSubnetDelegatedSubnet", MethodName = "withDelegatedSubnet", Description = "Associates a delegated Azure subnet resource with an Azure resource that supports subnet delegation.")] public static ApplicationModel.IResourceBuilder WithDelegatedSubnet(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder subnet) where T : Azure.IAzureDelegatedSubnetResource { throw null; } - [AspireExport("withNatGateway", Description = "Associates an Azure NAT Gateway resource with an Azure subnet resource.")] + [AspireExport(Description = "Associates an Azure NAT Gateway resource with an Azure subnet resource.")] public static ApplicationModel.IResourceBuilder WithNatGateway(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder natGateway) { throw null; } - [AspireExport("withNetworkSecurityGroup", Description = "Associates an Azure Network Security Group resource with an Azure subnet resource.")] + [AspireExport(Description = "Associates an Azure Network Security Group resource with an Azure subnet resource.")] public static ApplicationModel.IResourceBuilder WithNetworkSecurityGroup(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder nsg) { throw null; } } } @@ -84,7 +97,7 @@ public AzureNatGatewayResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } + + public BicepOutputReference Id { get { throw null; } } + + public BicepOutputReference NameOutputReference { get { throw null; } } public override global::Azure.Provisioning.Primitives.ProvisionableResource AddAsExistingResource(AzureResourceInfrastructure infra) { throw null; } } + [AspireDto] + public sealed partial class AzureNspAccessRule + { + public System.Collections.Generic.List AddressPrefixes { get { throw null; } } + + public System.Collections.Generic.List AddressPrefixReferences { get { throw null; } } + + public required global::Azure.Provisioning.Network.NetworkSecurityPerimeterAccessRuleDirection Direction { get { throw null; } set { } } + + public System.Collections.Generic.List FullyQualifiedDomainNameReferences { get { throw null; } } + + public System.Collections.Generic.List FullyQualifiedDomainNames { get { throw null; } } + + public required string Name { get { throw null; } set { } } + + public System.Collections.Generic.List SubscriptionReferences { get { throw null; } } + + public System.Collections.Generic.List Subscriptions { get { throw null; } } + } + public partial class AzurePrivateEndpointResource : AzureProvisioningResource { public AzurePrivateEndpointResource(string name, AzureSubnetResource subnet, IAzurePrivateEndpointTarget target, System.Action configureInfrastructure) : base(default!, default!) { } public BicepOutputReference Id { get { throw null; } } - public BicepOutputReference NameOutput { get { throw null; } } + public BicepOutputReference NameOutputReference { get { throw null; } } public AzureSubnetResource Subnet { get { throw null; } } @@ -123,7 +167,7 @@ public AzurePublicIPAddressResource(string name, System.Action AddAzureLogAnalyticsWorkspace(this IDistributedApplicationBuilder builder, string name) { throw null; } } } @@ -24,10 +24,12 @@ public AzureLogAnalyticsWorkspaceReferenceAnnotation(AzureLogAnalyticsWorkspaceR public AzureLogAnalyticsWorkspaceResource Workspace { get { throw null; } } } - public partial class AzureLogAnalyticsWorkspaceResource : AzureProvisioningResource + public partial class AzureLogAnalyticsWorkspaceResource : AzureProvisioningResource, IAzureNspAssociationTarget, ApplicationModel.IResource { public AzureLogAnalyticsWorkspaceResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } + public BicepOutputReference Id { get { throw null; } } + public BicepOutputReference NameOutputReference { get { throw null; } } public BicepOutputReference WorkspaceId { get { throw null; } } diff --git a/src/Aspire.Hosting.Azure.PostgreSQL/api/Aspire.Hosting.Azure.PostgreSQL.cs b/src/Aspire.Hosting.Azure.PostgreSQL/api/Aspire.Hosting.Azure.PostgreSQL.cs index e8c872ce3b4..6e8a1830a60 100644 --- a/src/Aspire.Hosting.Azure.PostgreSQL/api/Aspire.Hosting.Azure.PostgreSQL.cs +++ b/src/Aspire.Hosting.Azure.PostgreSQL/api/Aspire.Hosting.Azure.PostgreSQL.cs @@ -10,10 +10,10 @@ namespace Aspire.Hosting { public static partial class AzurePostgresExtensions { - [AspireExport("addAzurePostgresFlexibleServer", Description = "Adds an Azure PostgreSQL Flexible Server resource")] + [AspireExport(Description = "Adds an Azure PostgreSQL Flexible Server resource")] public static ApplicationModel.IResourceBuilder AddAzurePostgresFlexibleServer(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("addDatabase", Description = "Adds an Azure PostgreSQL database")] + [AspireExport(Description = "Adds an Azure PostgreSQL database")] public static ApplicationModel.IResourceBuilder AddDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } [System.Obsolete("This method is obsolete and will be removed in a future version. Use AddAzurePostgresFlexibleServer instead to add an Azure PostgreSQL Flexible Server resource.")] @@ -22,16 +22,16 @@ public static partial class AzurePostgresExtensions [System.Obsolete("This method is obsolete and will be removed in a future version. Use AddAzurePostgresFlexibleServer instead to add an Azure PostgreSQL Flexible Server resource.")] public static ApplicationModel.IResourceBuilder PublishAsAzurePostgresFlexibleServer(this ApplicationModel.IResourceBuilder builder) { throw null; } - [AspireExport("runAsContainer", Description = "Configures the Azure PostgreSQL Flexible Server resource to run locally in a container", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures the Azure PostgreSQL Flexible Server resource to run locally in a container", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsContainer(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } - [AspireExport("withPasswordAuthentication", Description = "Configures password authentication for Azure PostgreSQL Flexible Server")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withPasswordAuthentication dispatcher export.")] public static ApplicationModel.IResourceBuilder WithPasswordAuthentication(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder? userName = null, ApplicationModel.IResourceBuilder? password = null) { throw null; } - [AspireExport("withPasswordAuthenticationWithKeyVault", Description = "Configures password authentication using a specified Azure Key Vault resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withPasswordAuthentication dispatcher export.")] public static ApplicationModel.IResourceBuilder WithPasswordAuthentication(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder keyVaultBuilder, ApplicationModel.IResourceBuilder? userName = null, ApplicationModel.IResourceBuilder? password = null) { throw null; } - [AspireExport("withPostgresMcp", Description = "Adds a Postgres MCP server container", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds a Postgres MCP server container", RunSyncOnBackgroundThread = true)] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPOSTGRES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder WithPostgresMcp(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) { throw null; } } @@ -40,7 +40,7 @@ public static partial class AzurePostgresExtensions namespace Aspire.Hosting.Azure { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Database = {DatabaseName}")] - public partial class AzurePostgresFlexibleServerDatabaseResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class AzurePostgresFlexibleServerDatabaseResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public AzurePostgresFlexibleServerDatabaseResource(string name, string databaseName, AzurePostgresFlexibleServerResource postgresParentResource) : base(default!) { } @@ -62,7 +62,7 @@ public AzurePostgresFlexibleServerDatabaseResource(string name, string databaseN System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } } - public partial class AzurePostgresFlexibleServerResource : AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IAzurePrivateEndpointTarget + public partial class AzurePostgresFlexibleServerResource : AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IAzurePrivateEndpointTarget { public AzurePostgresFlexibleServerResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -102,13 +102,13 @@ public override void AddRoleAssignments(IAddRoleAssignmentsContext roleAssignmen System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } } [System.Obsolete("This class is obsolete and will be removed in a future version. Use AddAzurePostgresFlexibleServer instead to add an Azure Postgres Flexible Server resource.")] - public partial class AzurePostgresResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class AzurePostgresResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public AzurePostgresResource(ApplicationModel.PostgresServerResource innerResource, System.Action configureInfrastructure) : base(default!, default!) { } diff --git a/src/Aspire.Hosting.Azure.Redis/api/Aspire.Hosting.Azure.Redis.cs b/src/Aspire.Hosting.Azure.Redis/api/Aspire.Hosting.Azure.Redis.cs index bd86308be23..1ad9efd53c4 100644 --- a/src/Aspire.Hosting.Azure.Redis/api/Aspire.Hosting.Azure.Redis.cs +++ b/src/Aspire.Hosting.Azure.Redis/api/Aspire.Hosting.Azure.Redis.cs @@ -10,16 +10,16 @@ namespace Aspire.Hosting { public static partial class AzureManagedRedisExtensions { - [AspireExport("addAzureManagedRedis", Description = "Adds an Azure Managed Redis resource")] + [AspireExport(Description = "Adds an Azure Managed Redis resource")] public static ApplicationModel.IResourceBuilder AddAzureManagedRedis(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("runAsContainer", Description = "Configures Azure Managed Redis to run in a local container", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures Azure Managed Redis to run in a local container", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsContainer(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } - [AspireExport("withAccessKeyAuthenticationWithKeyVault", Description = "Configures Azure Managed Redis to use access key authentication with a specific Key Vault")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withAccessKeyAuthentication dispatcher export.")] public static ApplicationModel.IResourceBuilder WithAccessKeyAuthentication(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder keyVaultBuilder) { throw null; } - [AspireExport("withAccessKeyAuthentication", Description = "Configures Azure Managed Redis to use access key authentication")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withAccessKeyAuthentication dispatcher export.")] public static ApplicationModel.IResourceBuilder WithAccessKeyAuthentication(this ApplicationModel.IResourceBuilder builder) { throw null; } } @@ -48,7 +48,7 @@ public static partial class AzureRedisExtensions namespace Aspire.Hosting.Azure { [AspireExport(ExposeProperties = true)] - public partial class AzureManagedRedisResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IAzurePrivateEndpointTarget + public partial class AzureManagedRedisResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IAzurePrivateEndpointTarget { public AzureManagedRedisResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -79,13 +79,13 @@ public override void AddRoleAssignments(IAddRoleAssignmentsContext roleAssignmen System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } } [System.Obsolete("This class is obsolete and will be removed in a future version. Use AddAzureManagedRedis instead which provisions Azure Managed Redis.")] - public partial class AzureRedisCacheResource : AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class AzureRedisCacheResource : AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public AzureRedisCacheResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -108,7 +108,7 @@ public override void AddRoleAssignments(IAddRoleAssignmentsContext roleAssignmen } [System.Obsolete("This class is obsolete and will be removed in a future version. Use AddAzureRedis instead to add an Azure Cache for Redis resource.")] - public partial class AzureRedisResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class AzureRedisResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public AzureRedisResource(ApplicationModel.RedisResource innerResource, System.Action configureInfrastructure) : base(default!, default!) { } diff --git a/src/Aspire.Hosting.Azure.Search/api/Aspire.Hosting.Azure.Search.cs b/src/Aspire.Hosting.Azure.Search/api/Aspire.Hosting.Azure.Search.cs index ecc23c791df..92f283f9b60 100644 --- a/src/Aspire.Hosting.Azure.Search/api/Aspire.Hosting.Azure.Search.cs +++ b/src/Aspire.Hosting.Azure.Search/api/Aspire.Hosting.Azure.Search.cs @@ -10,7 +10,7 @@ namespace Aspire.Hosting { public static partial class AzureSearchExtensions { - [AspireExport("addAzureSearch", Description = "Adds an Azure AI Search service resource")] + [AspireExport(Description = "Adds an Azure AI Search service resource")] public static ApplicationModel.IResourceBuilder AddAzureSearch(this IDistributedApplicationBuilder builder, string name) { throw null; } [AspireExportIgnore(Reason = "SearchBuiltInRole is an Azure.Provisioning type not compatible with ATS. Use the AzureSearchRole-based overload instead.")] @@ -21,7 +21,7 @@ public static ApplicationModel.IResourceBuilder WithRoleAssignments(this A namespace Aspire.Hosting.Azure { - public partial class AzureSearchResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IAzurePrivateEndpointTarget + public partial class AzureSearchResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IAzurePrivateEndpointTarget, IAzureNspAssociationTarget { public AzureSearchResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -41,7 +41,7 @@ public AzureSearchResource(string name, System.Action> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } } diff --git a/src/Aspire.Hosting.Azure.ServiceBus/api/Aspire.Hosting.Azure.ServiceBus.cs b/src/Aspire.Hosting.Azure.ServiceBus/api/Aspire.Hosting.Azure.ServiceBus.cs index e42bb4234a0..fcc0b60819e 100644 --- a/src/Aspire.Hosting.Azure.ServiceBus/api/Aspire.Hosting.Azure.ServiceBus.cs +++ b/src/Aspire.Hosting.Azure.ServiceBus/api/Aspire.Hosting.Azure.ServiceBus.cs @@ -10,20 +10,20 @@ namespace Aspire.Hosting { public static partial class AzureServiceBusExtensions { - [AspireExport("addAzureServiceBus", Description = "Adds an Azure Service Bus namespace resource")] + [AspireExport(Description = "Adds an Azure Service Bus namespace resource")] public static ApplicationModel.IResourceBuilder AddAzureServiceBus(this IDistributedApplicationBuilder builder, string name) { throw null; } [AspireExportIgnore(Reason = "Obsolete API with incorrect return type. Use AddServiceBusQueue instead.")] [System.Obsolete("This method is obsolete because it has the wrong return type and will be removed in a future version. Use AddServiceBusQueue instead to add an Azure Service Bus Queue.")] public static ApplicationModel.IResourceBuilder AddQueue(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("addServiceBusQueue", Description = "Adds an Azure Service Bus queue resource")] + [AspireExport(Description = "Adds an Azure Service Bus queue resource")] public static ApplicationModel.IResourceBuilder AddServiceBusQueue(this ApplicationModel.IResourceBuilder builder, string name, string? queueName = null) { throw null; } - [AspireExport("addServiceBusSubscription", Description = "Adds an Azure Service Bus subscription resource")] + [AspireExport(Description = "Adds an Azure Service Bus subscription resource")] public static ApplicationModel.IResourceBuilder AddServiceBusSubscription(this ApplicationModel.IResourceBuilder builder, string name, string? subscriptionName = null) { throw null; } - [AspireExport("addServiceBusTopic", Description = "Adds an Azure Service Bus topic resource")] + [AspireExport(Description = "Adds an Azure Service Bus topic resource")] public static ApplicationModel.IResourceBuilder AddServiceBusTopic(this ApplicationModel.IResourceBuilder builder, string name, string? topicName = null) { throw null; } [AspireExportIgnore(Reason = "Obsolete API. Use AddServiceBusSubscription instead.")] @@ -38,16 +38,16 @@ public static partial class AzureServiceBusExtensions [System.Obsolete("This method is obsolete because it has the wrong return type and will be removed in a future version. Use AddServiceBusTopic instead to add an Azure Service Bus Topic.")] public static ApplicationModel.IResourceBuilder AddTopic(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("runAsEmulator", Description = "Configures the Azure Service Bus resource to run with the local emulator", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures the Azure Service Bus resource to run with the local emulator", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsEmulator(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } [AspireExportIgnore(Reason = "Action callbacks are not ATS-compatible.")] public static ApplicationModel.IResourceBuilder WithConfiguration(this ApplicationModel.IResourceBuilder builder, System.Action configJson) { throw null; } - [AspireExport("withConfigurationFile", Description = "Sets the emulator configuration file path")] + [AspireExport(Description = "Sets the emulator configuration file path")] public static ApplicationModel.IResourceBuilder WithConfigurationFile(this ApplicationModel.IResourceBuilder builder, string path) { throw null; } - [AspireExport("withHostPort", Description = "Sets the host port for the Service Bus emulator endpoint")] + [AspireExport(Description = "Sets the host port for the Service Bus emulator endpoint")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } [AspireExport("withQueueProperties", MethodName = "withProperties", Description = "Configures properties of an Azure Service Bus queue", RunSyncOnBackgroundThread = true)] @@ -106,7 +106,7 @@ public enum AzureServiceBusFilterType [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Queue = {QueueName}")] [AspireExport(ExposeProperties = true)] - public partial class AzureServiceBusQueueResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig + public partial class AzureServiceBusQueueResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig { public AzureServiceBusQueueResource(string name, string queueName, AzureServiceBusResource parent) : base(default!) { } @@ -140,7 +140,7 @@ void IResourceWithAzureFunctionsConfig.ApplyAzureFunctionsConfiguration(System.C } [AspireExport] - public partial class AzureServiceBusResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig, ApplicationModel.IResourceWithEndpoints, IAzurePrivateEndpointTarget + public partial class AzureServiceBusResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig, ApplicationModel.IResourceWithEndpoints, IAzurePrivateEndpointTarget, IAzureNspAssociationTarget { public AzureServiceBusResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -164,7 +164,7 @@ public AzureServiceBusResource(string name, System.Action> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } @@ -185,7 +185,7 @@ public AzureServiceBusRule(string name) { } [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Subscription = {SubscriptionName}")] [AspireExport(ExposeProperties = true)] - public partial class AzureServiceBusSubscriptionResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig + public partial class AzureServiceBusSubscriptionResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig { public AzureServiceBusSubscriptionResource(string name, string subscriptionName, AzureServiceBusTopicResource parent) : base(default!) { } @@ -218,7 +218,7 @@ void IResourceWithAzureFunctionsConfig.ApplyAzureFunctionsConfiguration(System.C [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Topic = {TopicName}")] [AspireExport(ExposeProperties = true)] - public partial class AzureServiceBusTopicResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig + public partial class AzureServiceBusTopicResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IResourceWithAzureFunctionsConfig { public AzureServiceBusTopicResource(string name, string topicName, AzureServiceBusResource parent) : base(default!) { } diff --git a/src/Aspire.Hosting.Azure.SignalR/api/Aspire.Hosting.Azure.SignalR.cs b/src/Aspire.Hosting.Azure.SignalR/api/Aspire.Hosting.Azure.SignalR.cs index 6567baf9444..c5d8171dc55 100644 --- a/src/Aspire.Hosting.Azure.SignalR/api/Aspire.Hosting.Azure.SignalR.cs +++ b/src/Aspire.Hosting.Azure.SignalR/api/Aspire.Hosting.Azure.SignalR.cs @@ -16,7 +16,7 @@ public static partial class AzureSignalRExtensions [AspireExportIgnore(Reason = "Use the dedicated polyglot overload instead.")] public static ApplicationModel.IResourceBuilder AddAzureSignalR(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("runAsEmulator", Description = "Configures an Azure SignalR resource to be emulated. This resource requires an Azure SignalR resource to be added to the application model. Please note that the resource will be emulated in Serverless mode.", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures an Azure SignalR resource to be emulated. This resource requires an Azure SignalR resource to be added to the application model. Please note that the resource will be emulated in Serverless mode.", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsEmulator(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } [AspireExportIgnore(Reason = "SignalRBuiltInRole is an Azure.Provisioning type not compatible with ATS. Use the AzureSignalRRole-based overload instead.")] @@ -27,7 +27,7 @@ public static ApplicationModel.IResourceBuilder WithRoleAssignments(this A namespace Aspire.Hosting.ApplicationModel { - public partial class AzureSignalRResource : Azure.AzureProvisioningResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences, IResourceWithEndpoints, Azure.IAzurePrivateEndpointTarget + public partial class AzureSignalRResource : Azure.AzureProvisioningResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences, IResourceWithEndpoints, Azure.IAzurePrivateEndpointTarget { public AzureSignalRResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -47,7 +47,7 @@ public AzureSignalRResource(string name, System.Action> IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string Azure.IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } } diff --git a/src/Aspire.Hosting.Azure.Sql/api/Aspire.Hosting.Azure.Sql.cs b/src/Aspire.Hosting.Azure.Sql/api/Aspire.Hosting.Azure.Sql.cs index eda559845f5..d8dd9b40955 100644 --- a/src/Aspire.Hosting.Azure.Sql/api/Aspire.Hosting.Azure.Sql.cs +++ b/src/Aspire.Hosting.Azure.Sql/api/Aspire.Hosting.Azure.Sql.cs @@ -10,10 +10,10 @@ namespace Aspire.Hosting { public static partial class AzureSqlExtensions { - [AspireExport("addAzureSqlServer", Description = "Adds an Azure SQL Database server resource")] + [AspireExport(Description = "Adds an Azure SQL Database server resource")] public static ApplicationModel.IResourceBuilder AddAzureSqlServer(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("addDatabase", Description = "Adds an Azure SQL database resource")] + [AspireExport(Description = "Adds an Azure SQL database resource")] public static ApplicationModel.IResourceBuilder AddDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } [System.Obsolete("This method is obsolete and will be removed in a future version. Use AddAzureSqlServer instead to add an Azure SQL server resource.")] @@ -22,18 +22,18 @@ public static partial class AzureSqlExtensions [System.Obsolete("This method is obsolete and will be removed in a future version. Use AddAzureSqlServer instead to add an Azure SQL server resource.")] public static ApplicationModel.IResourceBuilder PublishAsAzureSqlDatabase(this ApplicationModel.IResourceBuilder builder) { throw null; } - [AspireExport("runAsContainer", Description = "Configures the Azure SQL server to run locally in a SQL Server container", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures the Azure SQL server to run locally in a SQL Server container", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsContainer(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } - [AspireExport("withAdminDeploymentScriptStorage", Description = "Configures the Azure SQL server to use a specific storage account for deployment scripts")] + [AspireExport(Description = "Configures the Azure SQL server to use a specific storage account for deployment scripts")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE003", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] public static ApplicationModel.IResourceBuilder WithAdminDeploymentScriptStorage(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder storage) { throw null; } - [AspireExport("withAdminDeploymentScriptSubnet", Description = "Configures the Azure SQL server to use a specific subnet for deployment scripts")] + [AspireExport(Description = "Configures the Azure SQL server to use a specific subnet for deployment scripts")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE003", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] public static ApplicationModel.IResourceBuilder WithAdminDeploymentScriptSubnet(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder subnet) { throw null; } - [AspireExport("withDefaultAzureSku", Description = "Configures the Azure SQL database to use the default Azure SKU")] + [AspireExport(Description = "Configures the Azure SQL database to use the default Azure SKU")] public static ApplicationModel.IResourceBuilder WithDefaultAzureSku(this ApplicationModel.IResourceBuilder builder) { throw null; } } } @@ -42,7 +42,7 @@ namespace Aspire.Hosting.Azure { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Database = {DatabaseName}")] [AspireExport(ExposeProperties = true)] - public partial class AzureSqlDatabaseResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class AzureSqlDatabaseResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public AzureSqlDatabaseResource(string name, string databaseName, AzureSqlServerResource parent) : base(default!) { } @@ -66,7 +66,7 @@ public AzureSqlDatabaseResource(string name, string databaseName, AzureSqlServer } [AspireExport(ExposeProperties = true)] - public partial class AzureSqlServerResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, IAzurePrivateEndpointTarget, IAzurePrivateEndpointTargetNotification + public partial class AzureSqlServerResource : AzureProvisioningResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, IAzurePrivateEndpointTarget, IAzurePrivateEndpointTargetNotification, IAzureNspAssociationTarget { [System.Obsolete("This method is obsolete and will be removed in a future version. Use AddAzureSqlServer instead to add an Azure SQL server resource.")] public AzureSqlServerResource(ApplicationModel.SqlServerServerResource innerResource, System.Action configureInfrastructure) : base(default!, default!) { } @@ -105,7 +105,7 @@ public override void AddRoleAssignments(IAddRoleAssignmentsContext roleAssignmen System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } diff --git a/src/Aspire.Hosting.Azure.Storage/api/Aspire.Hosting.Azure.Storage.cs b/src/Aspire.Hosting.Azure.Storage/api/Aspire.Hosting.Azure.Storage.cs index 8c2fb8254dd..da2d56b6f10 100644 --- a/src/Aspire.Hosting.Azure.Storage/api/Aspire.Hosting.Azure.Storage.cs +++ b/src/Aspire.Hosting.Azure.Storage/api/Aspire.Hosting.Azure.Storage.cs @@ -10,56 +10,56 @@ namespace Aspire.Hosting { public static partial class AzureStorageExtensions { - [AspireExport("addAzureStorage", Description = "Adds an Azure Storage resource")] + [AspireExport(Description = "Adds an Azure Storage resource")] public static ApplicationModel.IResourceBuilder AddAzureStorage(this IDistributedApplicationBuilder builder, string name) { throw null; } [System.Obsolete("Use AddBlobContainer on IResourceBuilder instead.")] public static ApplicationModel.IResourceBuilder AddBlobContainer(this ApplicationModel.IResourceBuilder builder, string name, string? blobContainerName = null) { throw null; } - [AspireExport("addBlobContainer", Description = "Adds an Azure Blob Storage container resource")] + [AspireExport(Description = "Adds an Azure Blob Storage container resource")] public static ApplicationModel.IResourceBuilder AddBlobContainer(this ApplicationModel.IResourceBuilder builder, string name, string? blobContainerName = null) { throw null; } - [AspireExport("addBlobs", Description = "Adds an Azure Blob Storage resource")] + [AspireExport(Description = "Adds an Azure Blob Storage resource")] public static ApplicationModel.IResourceBuilder AddBlobs(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("addDataLake", Description = "Adds an Azure Data Lake Storage resource")] + [AspireExport(Description = "Adds an Azure Data Lake Storage resource")] public static ApplicationModel.IResourceBuilder AddDataLake(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("addDataLakeFileSystem", Description = "Adds an Azure Data Lake Storage file system resource")] + [AspireExport(Description = "Adds an Azure Data Lake Storage file system resource")] public static ApplicationModel.IResourceBuilder AddDataLakeFileSystem(this ApplicationModel.IResourceBuilder builder, string name, string? dataLakeFileSystemName = null) { throw null; } - [AspireExport("addQueue", Description = "Adds an Azure Storage queue resource")] + [AspireExport(Description = "Adds an Azure Storage queue resource")] public static ApplicationModel.IResourceBuilder AddQueue(this ApplicationModel.IResourceBuilder builder, string name, string? queueName = null) { throw null; } - [AspireExport("addQueues", Description = "Adds an Azure Queue Storage resource")] + [AspireExport(Description = "Adds an Azure Queue Storage resource")] public static ApplicationModel.IResourceBuilder AddQueues(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("addTables", Description = "Adds an Azure Table Storage resource")] + [AspireExport(Description = "Adds an Azure Table Storage resource")] public static ApplicationModel.IResourceBuilder AddTables(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("runAsEmulator", Description = "Configures the Azure Storage resource to be emulated using Azurite", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configures the Azure Storage resource to be emulated using Azurite", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder RunAsEmulator(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null) { throw null; } - [AspireExport("withApiVersionCheck", Description = "Configures whether the emulator checks API version validity")] + [AspireExport(Description = "Configures whether the emulator checks API version validity")] public static ApplicationModel.IResourceBuilder WithApiVersionCheck(this ApplicationModel.IResourceBuilder builder, bool enable = true) { throw null; } - [AspireExport("withBlobPort", Description = "Sets the host port for blob requests on the storage emulator")] + [AspireExport(Description = "Sets the host port for blob requests on the storage emulator")] public static ApplicationModel.IResourceBuilder WithBlobPort(this ApplicationModel.IResourceBuilder builder, int port) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a bind mount for the data folder to an Azure Storage emulator resource")] + [AspireExport(Description = "Adds a bind mount for the data folder to an Azure Storage emulator resource")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string? path = null, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a named volume for the data folder to an Azure Storage emulator resource")] + [AspireExport(Description = "Adds a named volume for the data folder to an Azure Storage emulator resource")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } - [AspireExport("withQueuePort", Description = "Sets the host port for queue requests on the storage emulator")] + [AspireExport(Description = "Sets the host port for queue requests on the storage emulator")] public static ApplicationModel.IResourceBuilder WithQueuePort(this ApplicationModel.IResourceBuilder builder, int port) { throw null; } [AspireExportIgnore(Reason = "StorageBuiltInRole is an Azure.Provisioning type not compatible with ATS. Use the AzureStorageRole-based overload instead.")] public static ApplicationModel.IResourceBuilder WithRoleAssignments(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder target, params global::Azure.Provisioning.Storage.StorageBuiltInRole[] roles) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withTablePort", Description = "Sets the host port for table requests on the storage emulator")] + [AspireExport(Description = "Sets the host port for table requests on the storage emulator")] public static ApplicationModel.IResourceBuilder WithTablePort(this ApplicationModel.IResourceBuilder builder, int port) { throw null; } } } @@ -67,7 +67,7 @@ public static ApplicationModel.IResourceBuilder WithRoleAssignments(this A namespace Aspire.Hosting.Azure { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, BlobContainer = {BlobContainerName}")] - public partial class AzureBlobStorageContainerResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent + public partial class AzureBlobStorageContainerResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent { public AzureBlobStorageContainerResource(string name, string blobContainerName, AzureBlobStorageResource parent) : base(default!) { } @@ -80,7 +80,7 @@ public AzureBlobStorageContainerResource(string name, string blobContainerName, System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } } - public partial class AzureBlobStorageResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget + public partial class AzureBlobStorageResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget { public AzureBlobStorageResource(string name, AzureStorageResource storage) : base(default!) { } @@ -94,14 +94,14 @@ public AzureBlobStorageResource(string name, AzureStorageResource storage) : bas System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } void IResourceWithAzureFunctionsConfig.ApplyAzureFunctionsConfiguration(System.Collections.Generic.IDictionary target, string connectionName) { } } - public partial class AzureDataLakeStorageFileSystemResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent + public partial class AzureDataLakeStorageFileSystemResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent { public AzureDataLakeStorageFileSystemResource(string name, string dataLakeFileSystemName, AzureDataLakeStorageResource parent) : base(default!) { } @@ -114,7 +114,7 @@ public AzureDataLakeStorageFileSystemResource(string name, string dataLakeFileSy System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } } - public partial class AzureDataLakeStorageResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget + public partial class AzureDataLakeStorageResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget { public AzureDataLakeStorageResource(string name, AzureStorageResource storage) : base(default!) { } @@ -128,7 +128,7 @@ public AzureDataLakeStorageResource(string name, AzureStorageResource storage) : System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } @@ -136,7 +136,7 @@ void IResourceWithAzureFunctionsConfig.ApplyAzureFunctionsConfiguration(System.C } [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Queue = {QueueName}")] - public partial class AzureQueueStorageQueueResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent + public partial class AzureQueueStorageQueueResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent { public AzureQueueStorageQueueResource(string name, string queueName, AzureQueueStorageResource parent) : base(default!) { } @@ -149,7 +149,7 @@ public AzureQueueStorageQueueResource(string name, string queueName, AzureQueueS System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } } - public partial class AzureQueueStorageResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget + public partial class AzureQueueStorageResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget { public AzureQueueStorageResource(string name, AzureStorageResource storage) : base(default!) { } @@ -163,7 +163,7 @@ public AzureQueueStorageResource(string name, AzureStorageResource storage) : ba System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } @@ -179,7 +179,7 @@ public AzureStorageEmulatorResource(AzureStorageResource innerResource) : base(d public override string Name { get { throw null; } } } - public partial class AzureStorageResource : AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, IResourceWithAzureFunctionsConfig + public partial class AzureStorageResource : AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, IResourceWithAzureFunctionsConfig, IAzureNspAssociationTarget { public AzureStorageResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -210,7 +210,7 @@ public AzureStorageResource(string name, System.Action target, string connectionName) { } } - public partial class AzureTableStorageResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget + public partial class AzureTableStorageResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, IResourceWithAzureFunctionsConfig, IAzurePrivateEndpointTarget { public AzureTableStorageResource(string name, AzureStorageResource storage) : base(default!) { } @@ -224,7 +224,7 @@ public AzureTableStorageResource(string name, AzureStorageResource storage) : ba System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } diff --git a/src/Aspire.Hosting.Azure.WebPubSub/api/Aspire.Hosting.Azure.WebPubSub.cs b/src/Aspire.Hosting.Azure.WebPubSub/api/Aspire.Hosting.Azure.WebPubSub.cs index bdf2cf0f728..1c9b87a5e55 100644 --- a/src/Aspire.Hosting.Azure.WebPubSub/api/Aspire.Hosting.Azure.WebPubSub.cs +++ b/src/Aspire.Hosting.Azure.WebPubSub/api/Aspire.Hosting.Azure.WebPubSub.cs @@ -10,7 +10,7 @@ namespace Aspire.Hosting { public static partial class AzureWebPubSubExtensions { - [AspireExport("addAzureWebPubSub", Description = "Adds an Azure Web PubSub resource to the distributed application model.")] + [AspireExport(Description = "Adds an Azure Web PubSub resource to the distributed application model.")] public static ApplicationModel.IResourceBuilder AddAzureWebPubSub(this IDistributedApplicationBuilder builder, string name) { throw null; } [AspireExportIgnore(Reason = "UpstreamAuthSettings is not ATS-compatible. Use the polyglot overload without auth settings instead.")] @@ -19,7 +19,7 @@ public static partial class AzureWebPubSubExtensions [AspireExportIgnore(Reason = "ExpressionInterpolatedStringHandler and UpstreamAuthSettings are not ATS-compatible. Use the polyglot overload without auth settings instead.")] public static ApplicationModel.IResourceBuilder AddEventHandler(this ApplicationModel.IResourceBuilder builder, ApplicationModel.ReferenceExpression.ExpressionInterpolatedStringHandler urlTemplateExpression, string userEventPattern = "*", string[]? systemEvents = null, global::Azure.Provisioning.WebPubSub.UpstreamAuthSettings? authSettings = null) { throw null; } - [AspireExport("addHub", Description = "Adds a hub to the Azure Web PubSub resource.")] + [AspireExport(Description = "Adds a hub to the Azure Web PubSub resource.")] public static ApplicationModel.IResourceBuilder AddHub(this ApplicationModel.IResourceBuilder builder, string name, string? hubName = null) { throw null; } [AspireExportIgnore(Reason = "Use the AddHub overload with the optional hubName parameter instead.")] @@ -34,7 +34,7 @@ public static ApplicationModel.IResourceBuilder WithRoleAssignments(this A namespace Aspire.Hosting.ApplicationModel { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Hub = {HubName}")] - public partial class AzureWebPubSubHubResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class AzureWebPubSubHubResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public AzureWebPubSubHubResource(string name, AzureWebPubSubResource webpubsub) : base(default!) { } @@ -47,7 +47,7 @@ public AzureWebPubSubHubResource(string name, string hubName, AzureWebPubSubReso public AzureWebPubSubResource Parent { get { throw null; } } } - public partial class AzureWebPubSubResource : Azure.AzureProvisioningResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences, Azure.IAzurePrivateEndpointTarget + public partial class AzureWebPubSubResource : Azure.AzureProvisioningResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences, Azure.IAzurePrivateEndpointTarget { public AzureWebPubSubResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -65,7 +65,7 @@ public AzureWebPubSubResource(string name, System.Action> IResourceWithConnectionString.GetConnectionProperties() { throw null; } - string Azure.IAzurePrivateEndpointTarget.GetPrivateDnsZoneName() { throw null; } + System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } } diff --git a/src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs b/src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs index 0146d174303..6040ea3b4fd 100644 --- a/src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs +++ b/src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs @@ -10,19 +10,19 @@ namespace Aspire.Hosting { public static partial class AzureBicepResourceExtensions { - [AspireExport("addBicepTemplate", Description = "Adds an Azure Bicep template resource from a file")] + [AspireExport(Description = "Adds an Azure Bicep template resource from a file")] public static ApplicationModel.IResourceBuilder AddBicepTemplate(this IDistributedApplicationBuilder builder, string name, string bicepFile) { throw null; } - [AspireExport("addBicepTemplateString", Description = "Adds an Azure Bicep template resource from inline Bicep content")] + [AspireExport(Description = "Adds an Azure Bicep template resource from inline Bicep content")] public static ApplicationModel.IResourceBuilder AddBicepTemplateString(this IDistributedApplicationBuilder builder, string name, string bicepContent) { throw null; } - [AspireExport("getOutput", Description = "Gets an output reference from an Azure Bicep template resource")] + [AspireExport(Description = "Gets an output reference from an Azure Bicep template resource")] public static Azure.BicepOutputReference GetOutput(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } [System.Obsolete("GetSecretOutput is obsolete. Use IAzureKeyVaultResource.GetSecret instead.")] public static Azure.BicepSecretOutputReference GetSecretOutput(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("withEnvironmentFromOutput", Description = "Sets an environment variable from a Bicep output reference")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withEnvironment dispatcher export.")] public static ApplicationModel.IResourceBuilder WithEnvironment(this ApplicationModel.IResourceBuilder builder, string name, Azure.BicepOutputReference bicepOutputReference) where T : ApplicationModel.IResourceWithEnvironment { throw null; } @@ -30,19 +30,19 @@ public static ApplicationModel.IResourceBuilder WithEnvironment(this Appli public static ApplicationModel.IResourceBuilder WithEnvironment(this ApplicationModel.IResourceBuilder builder, string name, Azure.BicepSecretOutputReference bicepOutputReference) where T : ApplicationModel.IResourceWithEnvironment { throw null; } - [AspireExport("withEnvironmentFromKeyVaultSecret", Description = "Sets an environment variable from an Azure Key Vault secret reference")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withEnvironment dispatcher export.")] public static ApplicationModel.IResourceBuilder WithEnvironment(this ApplicationModel.IResourceBuilder builder, string name, Azure.IAzureKeyVaultSecretReference secretReference) where T : ApplicationModel.IResourceWithEnvironment { throw null; } - [AspireExport("withParameterFromEndpoint", Description = "Adds a Bicep parameter from an endpoint reference")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.EndpointReference value) where T : Azure.AzureBicepResource { throw null; } - [AspireExport("withParameterFromConnectionString", Description = "Adds a Bicep parameter from a connection string resource builder")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.IResourceBuilder value) where T : Azure.AzureBicepResource { throw null; } - [AspireExport("withParameterFromParameter", Description = "Adds a Bicep parameter from a parameter resource builder")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.IResourceBuilder value) where T : Azure.AzureBicepResource { throw null; } @@ -50,15 +50,15 @@ public static ApplicationModel.IResourceBuilder WithParameter(this Applica public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.ParameterResource value) where T : Azure.AzureBicepResource { throw null; } - [AspireExport("withParameterFromReferenceExpression", Description = "Adds a Bicep parameter from a reference expression")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.ReferenceExpression value) where T : Azure.AzureBicepResource { throw null; } - [AspireExport("withParameterFromOutput", Description = "Adds a Bicep parameter from another Bicep output reference")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, Azure.BicepOutputReference value) where T : Azure.AzureBicepResource { throw null; } - [AspireExport("withParameterStringValues", Description = "Adds a Bicep parameter with a string list value")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, System.Collections.Generic.IEnumerable value) where T : Azure.AzureBicepResource { throw null; } @@ -66,7 +66,7 @@ public static ApplicationModel.IResourceBuilder WithParameter(this Applica public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, System.Func valueCallback) where T : Azure.AzureBicepResource { throw null; } - [AspireExport("withParameterStringValue", Description = "Adds a Bicep parameter with a string value")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, string value) where T : Azure.AzureBicepResource { throw null; } @@ -74,20 +74,20 @@ public static ApplicationModel.IResourceBuilder WithParameter(this Applica public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name, System.Text.Json.Nodes.JsonNode value) where T : Azure.AzureBicepResource { throw null; } - [AspireExport("withParameter", Description = "Adds a Bicep parameter without a value")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithParameter(this ApplicationModel.IResourceBuilder builder, string name) where T : Azure.AzureBicepResource { throw null; } } public static partial class AzureProvisionerExtensions { - [AspireExport("addAzureProvisioning", Description = "Adds Azure provisioning services to the distributed application builder")] + [AspireExport(Description = "Adds Azure provisioning services to the distributed application builder")] public static IDistributedApplicationBuilder AddAzureProvisioning(this IDistributedApplicationBuilder builder) { throw null; } } public static partial class AzureProvisioningResourceExtensions { - [AspireExport("addAzureInfrastructure", Description = "Adds an Azure provisioning resource to the application model")] + [AspireExport(Description = "Adds an Azure provisioning resource to the application model")] public static ApplicationModel.IResourceBuilder AddAzureInfrastructure(this IDistributedApplicationBuilder builder, string name, System.Action configureInfrastructure) { throw null; } [AspireExportIgnore(Reason = "KeyVaultSecret is an Azure.Provisioning type not compatible with ATS.")] @@ -111,21 +111,21 @@ public static partial class AzureProvisioningResourceExtensions [AspireExportIgnore(Reason = "ProvisioningParameter is an Azure.Provisioning type not compatible with ATS.")] public static global::Azure.Provisioning.ProvisioningParameter AsProvisioningParameter(this Azure.BicepOutputReference outputReference, Azure.AzureResourceInfrastructure infrastructure, string? parameterName = null) { throw null; } - [AspireExport("configureInfrastructure", Description = "Configures the Azure provisioning infrastructure callback")] + [AspireExport(Description = "Configures the Azure provisioning infrastructure callback")] public static ApplicationModel.IResourceBuilder ConfigureInfrastructure(this ApplicationModel.IResourceBuilder builder, System.Action configure) where T : Azure.AzureProvisioningResource { throw null; } } public static partial class AzureResourceExtensions { - [AspireExport("clearDefaultRoleAssignments", Description = "Clears the default Azure role assignments from a resource")] + [AspireExport(Description = "Clears the default Azure role assignments from a resource")] public static ApplicationModel.IResourceBuilder ClearDefaultRoleAssignments(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IAzureResource { throw null; } - [AspireExport("getBicepIdentifier", Description = "Gets the normalized Bicep identifier for an Azure resource")] + [AspireExport(Description = "Gets the normalized Bicep identifier for an Azure resource")] public static string GetBicepIdentifier(this ApplicationModel.IAzureResource resource) { throw null; } - [AspireExport("publishAsConnectionString", Description = "Publishes an Azure resource to the manifest as a connection string")] + [AspireExport(Description = "Publishes an Azure resource to the manifest as a connection string")] public static ApplicationModel.IResourceBuilder PublishAsConnectionString(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IAzureResource, ApplicationModel.IResourceWithConnectionString { throw null; } } @@ -239,6 +239,7 @@ public AzureBicepResourceScope(object resourceGroup) { } [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE001", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] public sealed partial class AzureEnvironmentResource : ApplicationModel.Resource { + public const string PrepareResourcesStepName = "azure-prepare-resources"; public const string ProvisionInfrastructureStepName = "provision-azure-bicep-resources"; public AzureEnvironmentResource(string name, ApplicationModel.ParameterResource location, ApplicationModel.ParameterResource resourceGroupName, ApplicationModel.ParameterResource principalId) : base(default!) { } @@ -251,15 +252,15 @@ public AzureEnvironmentResource(string name, ApplicationModel.ParameterResource public static partial class AzureEnvironmentResourceExtensions { - [AspireExport("addAzureEnvironment", Description = "Adds the shared Azure environment resource to the application model")] + [AspireExport(Description = "Adds the shared Azure environment resource to the application model")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder AddAzureEnvironment(this IDistributedApplicationBuilder builder) { throw null; } - [AspireExport("withLocation", Description = "Sets the Azure location for the shared Azure environment resource")] + [AspireExport(Description = "Sets the Azure location for the shared Azure environment resource")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder WithLocation(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder location) { throw null; } - [AspireExport("withResourceGroup", Description = "Sets the Azure resource group for the shared Azure environment resource")] + [AspireExport(Description = "Sets the Azure resource group for the shared Azure environment resource")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder WithResourceGroup(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder resourceGroup) { throw null; } } @@ -321,7 +322,7 @@ internal AzureResourceInfrastructure() : base(default!) { } public static partial class AzureUserAssignedIdentityExtensions { - [AspireExport("addAzureUserAssignedIdentity", Description = "Adds an Azure user-assigned identity resource")] + [AspireExport(Description = "Adds an Azure user-assigned identity resource")] public static ApplicationModel.IResourceBuilder AddAzureUserAssignedIdentity(this IDistributedApplicationBuilder builder, string name) { throw null; } [AspireExport("withUserAssignedIdentityAzureUserAssignedIdentity", MethodName = "withAzureUserAssignedIdentity", Description = "Associates an Azure user-assigned identity with a compute resource")] @@ -347,7 +348,7 @@ public AzureUserAssignedIdentityResource(string name) : base(default!, default!) } [AspireExport(ExposeProperties = true)] - public sealed partial class BicepOutputReference : ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, System.IEquatable + public sealed partial class BicepOutputReference : ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, System.IEquatable { public BicepOutputReference(string name, AzureBicepResource resource) { } @@ -369,7 +370,7 @@ public BicepOutputReference(string name, AzureBicepResource resource) { } } [System.Obsolete("BicepSecretOutputReference is no longer supported. Use IAzureKeyVaultResource instead.")] - public sealed partial class BicepSecretOutputReference : ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public sealed partial class BicepSecretOutputReference : ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public BicepSecretOutputReference(string name, AzureBicepResource resource) { } @@ -488,7 +489,7 @@ public partial interface IAzureKeyVaultResource : ApplicationModel.IResource, Ap } [AspireExport] - public partial interface IAzureKeyVaultSecretReference : ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences + public partial interface IAzureKeyVaultSecretReference : ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { System.Collections.Generic.IEnumerable ApplicationModel.IValueWithReferences.References { get; } @@ -499,12 +500,18 @@ public partial interface IAzureKeyVaultSecretReference : ApplicationModel.IValue ApplicationModel.IResource? SecretOwner { get; set; } } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE003", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] + public partial interface IAzureNspAssociationTarget : ApplicationModel.IResource + { + BicepOutputReference Id { get; } + } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREAZURE003", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] public partial interface IAzurePrivateEndpointTarget : ApplicationModel.IResource { BicepOutputReference Id { get; } - string GetPrivateDnsZoneName(); + System.Collections.Generic.IEnumerable GetPrivateDnsZoneNames(); System.Collections.Generic.IEnumerable GetPrivateLinkGroupIds(); } diff --git a/src/Aspire.Hosting.Browsers/api/Aspire.Hosting.Browsers.cs b/src/Aspire.Hosting.Browsers/api/Aspire.Hosting.Browsers.cs new file mode 100644 index 00000000000..1a408ddd69a --- /dev/null +++ b/src/Aspire.Hosting.Browsers/api/Aspire.Hosting.Browsers.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +namespace Aspire.Hosting +{ + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREBROWSERLOGS001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public static partial class BrowserLogsBuilderExtensions + { + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREBROWSERLOGS001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireExport(Description = "Adds a child browser logs resource that opens tracked browser sessions, captures browser logs, and captures screenshots.")] + public static ApplicationModel.IResourceBuilder WithBrowserLogs(this ApplicationModel.IResourceBuilder builder, string? browser = null, string? profile = null, BrowserUserDataMode? userDataMode = null) + where T : ApplicationModel.IResourceWithEndpoints { throw null; } + } + + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREBROWSERLOGS001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public enum BrowserUserDataMode + { + Shared = 0, + Isolated = 1 + } +} \ No newline at end of file diff --git a/src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs b/src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs index 59ab232f8b6..e6f16237871 100644 --- a/src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs +++ b/src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs @@ -23,7 +23,7 @@ public static partial class DevTunnelsResourceBuilderExtensions public static ApplicationModel.EndpointReference GetEndpoint(this ApplicationModel.IResourceBuilder tunnelBuilder, ApplicationModel.IResourceBuilder resourceBuilder, string endpointName) where TResource : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExport("withAnonymousAccess", Description = "Configures the dev tunnel to allow anonymous access.")] + [AspireExport(Description = "Configures the dev tunnel to allow anonymous access.")] public static ApplicationModel.IResourceBuilder WithAnonymousAccess(this ApplicationModel.IResourceBuilder tunnelBuilder) { throw null; } [AspireExportIgnore(Reason = "DevTunnelPortOptions is not ATS-compatible. Use the overload with EndpointReference or EndpointReference + bool instead.")] diff --git a/src/Aspire.Hosting.Docker/api/Aspire.Hosting.Docker.cs b/src/Aspire.Hosting.Docker/api/Aspire.Hosting.Docker.cs index cb828eaae63..afb1d90ed6f 100644 --- a/src/Aspire.Hosting.Docker/api/Aspire.Hosting.Docker.cs +++ b/src/Aspire.Hosting.Docker/api/Aspire.Hosting.Docker.cs @@ -332,6 +332,9 @@ public sealed partial class Service : NamedComposeMember [YamlDotNet.Serialization.YamlMember(Alias = "ports", DefaultValuesHandling = YamlDotNet.Serialization.DefaultValuesHandling.OmitEmptyCollections)] public System.Collections.Generic.List Ports { get { throw null; } set { } } + [YamlDotNet.Serialization.YamlMember(Alias = "privileged")] + public bool? Privileged { get { throw null; } set { } } + [YamlDotNet.Serialization.YamlMember(Alias = "profiles", DefaultValuesHandling = YamlDotNet.Serialization.DefaultValuesHandling.OmitEmptyCollections)] public System.Collections.Generic.List Profiles { get { throw null; } set { } } diff --git a/src/Aspire.Hosting.EntityFrameworkCore/api/Aspire.Hosting.EntityFrameworkCore.cs b/src/Aspire.Hosting.EntityFrameworkCore/api/Aspire.Hosting.EntityFrameworkCore.cs new file mode 100644 index 00000000000..2d62bdb47b3 --- /dev/null +++ b/src/Aspire.Hosting.EntityFrameworkCore/api/Aspire.Hosting.EntityFrameworkCore.cs @@ -0,0 +1,85 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +namespace Aspire.Hosting +{ + public static partial class EFMigrationResourceBuilderExtensions + { + [AspireExport] + public static ApplicationModel.IResourceBuilder PublishAsMigrationBundle(this ApplicationModel.IResourceBuilder builder, string? targetRuntime = null, bool selfContained = false, bool publishContainer = false, string? baseImage = null) { throw null; } + + [AspireExport] + public static ApplicationModel.IResourceBuilder PublishAsMigrationScript(this ApplicationModel.IResourceBuilder builder, bool idempotent = true, bool noTransactions = false) { throw null; } + + [AspireExport] + public static ApplicationModel.IResourceBuilder RunDatabaseUpdateOnStart(this ApplicationModel.IResourceBuilder builder) { throw null; } + + [AspireExport] + public static ApplicationModel.IResourceBuilder WithMigrationNamespace(this ApplicationModel.IResourceBuilder builder, string @namespace) { throw null; } + + [AspireExport] + public static ApplicationModel.IResourceBuilder WithMigrationOutputDirectory(this ApplicationModel.IResourceBuilder builder, string outputDirectory) { throw null; } + + [AspireExport("withMigrationsProjectFromPath", MethodName = "withMigrationsProject", Description = "Configures a separate project containing the migrations using a path")] + public static ApplicationModel.IResourceBuilder WithMigrationsProject(this ApplicationModel.IResourceBuilder builder, string projectPath) { throw null; } + + [AspireExport] + public static ApplicationModel.IResourceBuilder WithMigrationsProject(this ApplicationModel.IResourceBuilder builder) + where TProject : IProjectMetadata, new() { throw null; } + } + + public static partial class EFResourceBuilderExtensions + { + [AspireExportIgnore(Reason = "Action> callbacks are not ATS-compatible.")] + public static ApplicationModel.IResourceBuilder AddEFMigrations(this ApplicationModel.IResourceBuilder builder, string name, System.Action>? configureToolResource) { throw null; } + + [AspireExportIgnore(Reason = "Action> callbacks are not ATS-compatible.")] + public static ApplicationModel.IResourceBuilder AddEFMigrations(this ApplicationModel.IResourceBuilder builder, string name, string dbContextTypeName, System.Action>? configureToolResource) { throw null; } + + [AspireExport("addEFMigrationsWithContextType", MethodName = "addEFMigrations", Description = "Adds EF Core migration management for a specific DbContext type identified by name")] + public static ApplicationModel.IResourceBuilder AddEFMigrations(this ApplicationModel.IResourceBuilder builder, string name, string dbContextTypeName) { throw null; } + + [AspireExport] + public static ApplicationModel.IResourceBuilder AddEFMigrations(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } + } +} + +namespace Aspire.Hosting.EntityFrameworkCore +{ + [AspireExport(ExposeProperties = true)] + public partial class EFMigrationResource : ApplicationModel.ContainerResource + { + public EFMigrationResource(string name, ApplicationModel.ProjectResource projectResource, string? dbContextTypeName) : base(default!, default) { } + + public string? BundleBaseImage { get { throw null; } set { } } + + public bool BundleSelfContained { get { throw null; } set { } } + + public string? BundleTargetRuntime { get { throw null; } set { } } + + public string? DbContextTypeName { get { throw null; } } + + public string? MigrationNamespace { get { throw null; } set { } } + + public string? MigrationOutputDirectory { get { throw null; } set { } } + + public string? MigrationsProjectPath { get { throw null; } set { } } + + public ApplicationModel.ProjectResource ProjectResource { get { throw null; } } + + public bool PublishAsMigrationBundle { get { throw null; } set { } } + + public bool PublishAsMigrationScript { get { throw null; } set { } } + + public bool PublishBundleContainer { get { throw null; } set { } } + + public bool ScriptIdempotent { get { throw null; } set { } } + + public bool ScriptNoTransactions { get { throw null; } set { } } + } +} \ No newline at end of file diff --git a/src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs b/src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs index 3825f1137f4..d06267be2e2 100644 --- a/src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs +++ b/src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs @@ -10,12 +10,21 @@ namespace Aspire.Hosting { public static partial class AzureCognitiveServicesProjectConnectionsBuilderExtensions { + [AspireExport("addBingGroundingConnectionFromParameter", Description = "Adds a Grounding with Bing Search connection to a Microsoft Foundry project using a parameter.")] + public static ApplicationModel.IResourceBuilder AddBingGroundingConnection(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.IResourceBuilder bingResourceId) { throw null; } + + [AspireExport(Description = "Adds a Grounding with Bing Search connection to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddBingGroundingConnection(this ApplicationModel.IResourceBuilder builder, string name, string bingResourceId) { throw null; } + [AspireExport("addContainerRegistryConnection", Description = "Adds an Azure Container Registry connection to a Microsoft Foundry project.")] public static ApplicationModel.IResourceBuilder AddConnection(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder registry) { throw null; } [AspireExport("addKeyVaultConnection", Description = "Adds an Azure Key Vault connection to a Microsoft Foundry project.")] public static ApplicationModel.IResourceBuilder AddConnection(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder keyVault) { throw null; } + [AspireExport("addSearchConnection", Description = "Adds an Azure AI Search connection to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddConnection(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder search) { throw null; } + [AspireExport("addStorageConnection", Description = "Adds an Azure Storage connection to a Microsoft Foundry project.")] public static ApplicationModel.IResourceBuilder AddConnection(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder storage) { throw null; } @@ -25,6 +34,9 @@ public static partial class AzureCognitiveServicesProjectConnectionsBuilderExten [AspireExportIgnore(Reason = "Raw AzureContainerRegistryResource parameters are not ATS-compatible. Use the resource-builder overload instead.")] public static ApplicationModel.IResourceBuilder AddConnection(this ApplicationModel.IResourceBuilder builder, Azure.AzureContainerRegistryResource registry) { throw null; } + [AspireExport("addSearchConnectionFromResource", Description = "Adds an Azure AI Search connection to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddConnection(this ApplicationModel.IResourceBuilder builder, Azure.AzureSearchResource search) { throw null; } + [AspireExportIgnore(Reason = "Raw AzureStorageResource parameters are not ATS-compatible. Use the resource-builder overload instead.")] public static ApplicationModel.IResourceBuilder AddConnection(this ApplicationModel.IResourceBuilder builder, Azure.AzureStorageResource storage) { throw null; } @@ -40,25 +52,19 @@ public static partial class AzureCognitiveServicesProjectExtensions [AspireExportIgnore(Reason = "CapabilityHostBuilder is not ATS-compatible.")] public static Foundry.CapabilityHostBuilder AddCapabilityHost(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("addModelDeploymentFromModel", Description = "Adds a model deployment to the parent Microsoft Foundry resource by using a model descriptor.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addModelDeployment dispatcher export.")] public static ApplicationModel.IResourceBuilder AddModelDeployment(this ApplicationModel.IResourceBuilder builder, string name, Foundry.FoundryModel model) { throw null; } - [AspireExport("addModelDeployment", Description = "Adds a model deployment to the parent Microsoft Foundry resource.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addModelDeployment dispatcher export.")] public static ApplicationModel.IResourceBuilder AddModelDeployment(this ApplicationModel.IResourceBuilder builder, string name, string modelName, string modelVersion, string format) { throw null; } - [AspireExport("addProject", Description = "Adds a Microsoft Foundry project resource to a Microsoft Foundry resource.")] + [AspireExport(Description = "Adds a Microsoft Foundry project resource to a Microsoft Foundry resource.")] public static ApplicationModel.IResourceBuilder AddProject(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } - [AspireExport("withAppInsights", Description = "Associates an Azure Application Insights resource with a Microsoft Foundry project.")] + [AspireExport(Description = "Associates an Azure Application Insights resource with a Microsoft Foundry project.")] public static ApplicationModel.IResourceBuilder WithAppInsights(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder appInsights) { throw null; } - [AspireExportIgnore(Reason = "IContainerRegistry is not ATS-compatible. Use the resource-builder overload instead.")] - public static ApplicationModel.IResourceBuilder WithContainerRegistry(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IContainerRegistry registry) { throw null; } - - [AspireExport("withContainerRegistry", Description = "Associates a container registry with a Microsoft Foundry project resource.")] - public static ApplicationModel.IResourceBuilder WithContainerRegistry(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder registryBuilder) { throw null; } - - [AspireExport("withKeyVault", Description = "Associates an Azure Key Vault resource with a Microsoft Foundry project.")] + [AspireExport(Description = "Associates an Azure Key Vault resource with a Microsoft Foundry project.")] public static ApplicationModel.IResourceBuilder WithKeyVault(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder keyVault) { throw null; } [AspireExportIgnore(Reason = "The standard WithReference export already covers this polyglot scenario.")] @@ -68,16 +74,16 @@ public static ApplicationModel.IResourceBuilder WithReference AddDeployment(this ApplicationModel.IResourceBuilder builder, string name, Foundry.FoundryModel model) { throw null; } - [AspireExport("addDeployment", Description = "Adds a Microsoft Foundry deployment resource to a Microsoft Foundry resource.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addDeployment dispatcher export.")] public static ApplicationModel.IResourceBuilder AddDeployment(this ApplicationModel.IResourceBuilder builder, string name, string modelName, string modelVersion, string format) { throw null; } - [AspireExport("addFoundry", Description = "Adds a Microsoft Foundry resource to the distributed application model.")] + [AspireExport(Description = "Adds a Microsoft Foundry resource to the distributed application model.")] public static ApplicationModel.IResourceBuilder AddFoundry(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("runAsFoundryLocal", Description = "Configures the Microsoft Foundry resource to run by using Foundry Local.")] + [AspireExport(Description = "Configures the Microsoft Foundry resource to run by using Foundry Local.")] public static ApplicationModel.IResourceBuilder RunAsFoundryLocal(this ApplicationModel.IResourceBuilder builder) { throw null; } [AspireExport("withFoundryDeploymentProperties", MethodName = "withProperties", Description = "Configures properties of a Microsoft Foundry deployment resource.", RunSyncOnBackgroundThread = true)] @@ -90,9 +96,6 @@ public static ApplicationModel.IResourceBuilder WithRoleAssignments(this A public static partial class HostedAgentResourceBuilderExtensions { - [AspireExport("addAndPublishPromptAgent", Description = "Adds and publishes a prompt agent to a Microsoft Foundry project.")] - public static ApplicationModel.IResourceBuilder AddAndPublishPromptAgent(this ApplicationModel.IResourceBuilder project, ApplicationModel.IResourceBuilder model, string name, string? instructions) { throw null; } - [AspireExportIgnore(Reason = "RunAsHostedAgent is not yet implemented, so AsHostedAgent is not available in polyglot hosts.")] public static ApplicationModel.IResourceBuilder AsHostedAgent(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder? project = null, System.Action? configure = null) where T : ApplicationModel.ExecutableResource { throw null; } @@ -103,11 +106,11 @@ public static ApplicationModel.IResourceBuilder AsHostedAgent(this Applica [AspireExport("publishAsHostedAgentExecutable", MethodName = "publishAsHostedAgent", Description = "Publishes an executable resource as a hosted agent in Microsoft Foundry.")] public static ApplicationModel.IResourceBuilder PublishAsHostedAgent(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder? project = null, System.Action? configure = null) - where T : ApplicationModel.ExecutableResource { throw null; } + where T : ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResourceWithEnvironment, ApplicationModel.IComputeResource { throw null; } [AspireExportIgnore(Reason = "Subset of the full PublishAsHostedAgent overload which is exported.")] public static ApplicationModel.IResourceBuilder PublishAsHostedAgent(this ApplicationModel.IResourceBuilder builder, System.Action configure) - where T : ApplicationModel.ExecutableResource { throw null; } + where T : ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResourceWithEnvironment, ApplicationModel.IComputeResource { throw null; } [AspireExportIgnore(Reason = "RunAsHostedAgent is not yet implemented.")] public static ApplicationModel.IResourceBuilder RunAsHostedAgent(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder? project = null, System.Action? configure = null) @@ -117,10 +120,82 @@ public static ApplicationModel.IResourceBuilder RunAsHostedAgent(this Appl public static ApplicationModel.IResourceBuilder RunAsHostedAgent(this ApplicationModel.IResourceBuilder builder, System.Action configure) where T : ApplicationModel.ExecutableResource { throw null; } } + + public static partial class PromptAgentBuilderExtensions + { + [AspireExport(Description = "Adds an Azure AI Search tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddAISearchTool(this ApplicationModel.IResourceBuilder project, string name, string? indexName = null) { throw null; } + + [AspireExportIgnore(Reason = "BinaryData parameter is not ATS-compatible. Use the string overload instead.")] + public static ApplicationModel.IResourceBuilder AddAzureFunctionTool(this ApplicationModel.IResourceBuilder project, string name, string functionName, string description, System.BinaryData parameters, string inputQueueEndpoint, string inputQueueName, string outputQueueEndpoint, string outputQueueName) { throw null; } + + [AspireExport(Description = "Adds an Azure Function tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddAzureFunctionTool(this ApplicationModel.IResourceBuilder project, string name, string functionName, string description, string parametersJson, string inputQueueEndpoint, string inputQueueName, string outputQueueEndpoint, string outputQueueName) { throw null; } + + [AspireExport(Description = "Adds a Bing Grounding tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddBingGroundingTool(this ApplicationModel.IResourceBuilder project, string name) { throw null; } + + [AspireExport(Description = "Adds a Code Interpreter tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddCodeInterpreterTool(this ApplicationModel.IResourceBuilder project, string name) { throw null; } + + [AspireExport(Description = "Adds a Computer Use tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddComputerUseTool(this ApplicationModel.IResourceBuilder project, string name, int displayWidth = 1024, int displayHeight = 768, string environment = "browser") { throw null; } + + [AspireExport(Description = "Adds a Microsoft Fabric data agent tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddFabricTool(this ApplicationModel.IResourceBuilder project, string name, params string[] projectConnectionIds) { throw null; } + + [AspireExport(Description = "Adds a File Search tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddFileSearchTool(this ApplicationModel.IResourceBuilder project, string name, params string[] vectorStoreIds) { throw null; } + + [AspireExportIgnore(Reason = "BinaryData parameter is not ATS-compatible. Use the string overload instead.")] + public static ApplicationModel.IResourceBuilder AddFunctionTool(this ApplicationModel.IResourceBuilder project, string name, string functionName, System.BinaryData parameters, string? description = null, bool? strictModeEnabled = null) { throw null; } + + [AspireExport(Description = "Adds an Image Generation tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddImageGenerationTool(this ApplicationModel.IResourceBuilder project, string name) { throw null; } + + [AspireExport(Description = "Adds a prompt agent to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddPromptAgent(this ApplicationModel.IResourceBuilder project, ApplicationModel.IResourceBuilder model, string name, string? instructions = null) { throw null; } + + [AspireExport(Description = "Adds a SharePoint grounding tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddSharePointTool(this ApplicationModel.IResourceBuilder project, string name, params string[] projectConnectionIds) { throw null; } + + [AspireExport(Description = "Adds a Web Search tool to a Microsoft Foundry project.")] + public static ApplicationModel.IResourceBuilder AddWebSearchTool(this ApplicationModel.IResourceBuilder project, string name) { throw null; } + + [AspireExportIgnore(Reason = "IFoundryTool is not ATS-compatible.")] + public static ApplicationModel.IResourceBuilder WithCustomTool(this ApplicationModel.IResourceBuilder builder, Foundry.IFoundryTool tool) { throw null; } + + [AspireExport(Description = "Links an Azure AI Search tool to a backing search resource.")] + public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder tool, ApplicationModel.IResourceBuilder search) { throw null; } + + [AspireExportIgnore(Reason = "Covered by the internal AspireUnion overload.")] + public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder tool, ApplicationModel.IResourceBuilder bingResourceId) { throw null; } + + [AspireExportIgnore(Reason = "Covered by the internal AspireUnion overload.")] + public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder tool, ApplicationModel.IResourceBuilder bingConnection) { throw null; } + + [AspireExportIgnore(Reason = "Covered by the internal AspireUnion overload.")] + public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder tool, string bingResourceId) { throw null; } + + [AspireExport(Description = "Adds a tool to a prompt agent.")] + public static ApplicationModel.IResourceBuilder WithTool(this ApplicationModel.IResourceBuilder agent, ApplicationModel.IResourceBuilder tool) { throw null; } + } } namespace Aspire.Hosting.Foundry { + [AspireExport] + public partial class AzureAISearchToolResource : FoundryToolResource + { + public AzureAISearchToolResource(string name, AzureCognitiveServicesProjectResource project) : base(default!, default!) { } + + public string? IndexName { get { throw null; } set { } } + + public Azure.AzureSearchResource? SearchResource { get { throw null; } } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + } + public partial class AzureCognitiveServicesProjectConnectionResource : AzureProvisionableAspireResourceWithParent { public AzureCognitiveServicesProjectConnectionResource(string name, System.Action configureInfrastructure, AzureCognitiveServicesProjectResource parent) : base(default!, default!, default!) { } @@ -130,7 +205,7 @@ public AzureCognitiveServicesProjectConnectionResource(string name, System.Actio public override void SetName(global::Azure.Provisioning.CognitiveServices.CognitiveServicesProjectConnection provisionableResource, global::Azure.Provisioning.BicepValue name) { } } - public partial class AzureCognitiveServicesProjectResource : AzureProvisionableAspireResourceWithParent, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, Azure.IAzureComputeEnvironmentResource, ApplicationModel.IComputeEnvironmentResource + public partial class AzureCognitiveServicesProjectResource : AzureProvisionableAspireResourceWithParent, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, Azure.IAzureComputeEnvironmentResource, ApplicationModel.IComputeEnvironmentResource { public AzureCognitiveServicesProjectResource(string name, System.Action configureInfrastructure, FoundryResource parent) : base(default!, default!, default!) { } @@ -165,7 +240,29 @@ public override void SetName(global::Azure.Provisioning.CognitiveServices.Cognit public bool TryGetAppIdentityResource(out Azure.IAppIdentityResource? identity) { throw null; } } - public partial class AzureHostedAgentResource : ApplicationModel.Resource, ApplicationModel.IComputeResource, ApplicationModel.IResource, ApplicationModel.IResourceWithEnvironment + [AspireExport] + public sealed partial class AzureFunctionToolResource : FoundryToolResource + { + public AzureFunctionToolResource(string name, AzureCognitiveServicesProjectResource project, string functionName, string description, System.BinaryData parameters, string inputQueueEndpoint, string inputQueueName, string outputQueueEndpoint, string outputQueueName) : base(default!, default!) { } + + public string Description { get { throw null; } } + + public string FunctionName { get { throw null; } } + + public string InputQueueEndpoint { get { throw null; } } + + public string InputQueueName { get { throw null; } } + + public string OutputQueueEndpoint { get { throw null; } } + + public string OutputQueueName { get { throw null; } } + + public System.BinaryData Parameters { get { throw null; } } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + } + + public partial class AzureHostedAgentResource : ApplicationModel.Resource, ApplicationModel.IResourceWithEnvironment, ApplicationModel.IResource { public AzureHostedAgentResource(string name, ApplicationModel.IResource target, System.Action? configure = null) : base(default!) { } @@ -176,31 +273,31 @@ public AzureHostedAgentResource(string name, ApplicationModel.IResource target, public ApplicationModel.IResource Target { get { throw null; } } public StaticValueProvider Version { get { throw null; } } - - public System.Threading.Tasks.Task DeployAsync(Pipelines.PipelineStepContext context, AzureCognitiveServicesProjectResource project) { throw null; } - - public System.Threading.Tasks.Task PublishAsync(Publishing.ManifestPublishingContext ctx) { throw null; } - - public System.Threading.Tasks.Task ToHostedAgentConfigurationAsync(Pipelines.PipelineStepContext context) { throw null; } } - public partial class AzurePromptAgentResource : ApplicationModel.ExecutableResource, ApplicationModel.IComputeResource, ApplicationModel.IResource + [AspireExport(ExposeProperties = true)] + public partial class AzurePromptAgentResource : ApplicationModel.Resource, ApplicationModel.IResourceWithEnvironment, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { - public AzurePromptAgentResource(string name, string model, string? instructions) : base(default!, default!, default!) { } + public AzurePromptAgentResource(string name, string model, AzureCognitiveServicesProjectResource project, string? instructions = null) : base(default!) { } + + public ApplicationModel.ReferenceExpression ConnectionStringExpression { get { throw null; } } public string Description { get { throw null; } set { } } - public string Instructions { get { throw null; } set { } } + public string? Instructions { get { throw null; } set { } } public System.Collections.Generic.IDictionary Metadata { get { throw null; } init { } } public string Model { get { throw null; } set { } } - public StaticValueProvider Version { get { throw null; } } + public AzureCognitiveServicesProjectResource Project { get { throw null; } } + + [AspireExportIgnore(Reason = "IFoundryTool is a .NET extensibility point and is not ATS-compatible.")] + public System.Collections.Generic.IReadOnlyList Tools { get { throw null; } } - public System.Threading.Tasks.Task DeployAsync(Pipelines.PipelineStepContext context, AzureCognitiveServicesProjectResource project) { throw null; } + public StaticValueProvider Version { get { throw null; } } - public System.Threading.Tasks.Task PublishAsync(Publishing.ManifestPublishingContext ctx) { throw null; } + System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } } public static partial class AzureProvisionableAspireResourceExtensions @@ -229,6 +326,24 @@ protected AzureProvisionableAspireResource(string name, System.Action name); } + [AspireExport] + public partial class BingGroundingConnectionResource : AzureProvisionableAspireResourceWithParent + { + public BingGroundingConnectionResource(string name, System.Action configureInfrastructure, AzureCognitiveServicesProjectResource parent) : base(default!, default!, default!) { } + + public override global::Azure.Provisioning.CognitiveServices.CognitiveServicesConnection FromExisting(string bicepIdentifier) { throw null; } + + public override void SetName(global::Azure.Provisioning.CognitiveServices.CognitiveServicesConnection provisionableResource, global::Azure.Provisioning.BicepValue name) { } + } + + [AspireExport] + public partial class BingGroundingToolResource : FoundryToolResource + { + public BingGroundingToolResource(string name, AzureCognitiveServicesProjectResource project) : base(default!, default!) { } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + } + public partial class CapabilityHostBuilder { public CapabilityHostBuilder(ApplicationModel.IResourceBuilder projectBuilder, CapabilityHostConfiguration configuration) { } @@ -261,8 +376,50 @@ public CapabilityHostConfiguration(string name) { } public Azure.AzureStorageResource? Storage { get { throw null; } set { } } } + [AspireExport] + public sealed partial class CodeInterpreterToolResource : FoundryToolResource + { + public CodeInterpreterToolResource(string name, AzureCognitiveServicesProjectResource project) : base(default!, default!) { } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + } + + [AspireExport] + public sealed partial class ComputerToolResource : FoundryToolResource + { + public ComputerToolResource(string name, AzureCognitiveServicesProjectResource project, int displayWidth = 1024, int displayHeight = 768, string environment = "browser") : base(default!, default!) { } + + public int DisplayHeight { get { throw null; } } + + public int DisplayWidth { get { throw null; } } + + public string Environment { get { throw null; } } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + } + + [AspireExport] + public sealed partial class FabricToolResource : FoundryToolResource + { + public FabricToolResource(string name, AzureCognitiveServicesProjectResource project, params string[] projectConnectionIds) : base(default!, default!) { } + + public System.Collections.Generic.IList ProjectConnectionIds { get { throw null; } } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + } + + [AspireExport] + public sealed partial class FileSearchToolResource : FoundryToolResource + { + public FileSearchToolResource(string name, AzureCognitiveServicesProjectResource project) : base(default!, default!) { } + + public System.Collections.Generic.IList VectorStoreIds { get { throw null; } init { } } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + } + [AspireExport(ExposeProperties = true)] - public partial class FoundryDeploymentResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class FoundryDeploymentResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public FoundryDeploymentResource(string name, string modelName, string modelVersion, string format, FoundryResource parent) : base(default!) { } @@ -296,39 +453,65 @@ public partial class FoundryModel public static partial class AI21Labs { + [AspireValue("FoundryModels")] public static readonly FoundryModel AI21Jamba15Large; + [AspireValue("FoundryModels")] public static readonly FoundryModel AI21Jamba15Mini; } public static partial class Anthropic { + [AspireValue("FoundryModels")] public static readonly FoundryModel ClaudeHaiku45; + [AspireValue("FoundryModels")] + public static readonly FoundryModel ClaudeMythosPreview; + [AspireValue("FoundryModels")] public static readonly FoundryModel ClaudeOpus41; + [AspireValue("FoundryModels")] public static readonly FoundryModel ClaudeOpus45; + [AspireValue("FoundryModels")] public static readonly FoundryModel ClaudeOpus46; + [AspireValue("FoundryModels")] + public static readonly FoundryModel ClaudeOpus47; + [AspireValue("FoundryModels")] public static readonly FoundryModel ClaudeSonnet45; + [AspireValue("FoundryModels")] public static readonly FoundryModel ClaudeSonnet46; } public static partial class BlackForestLabs { + [AspireValue("FoundryModels")] public static readonly FoundryModel Flux11Pro; + [AspireValue("FoundryModels")] public static readonly FoundryModel Flux1KontextPro; + [AspireValue("FoundryModels")] public static readonly FoundryModel Flux2Flex; + [AspireValue("FoundryModels")] public static readonly FoundryModel Flux2Pro; } public static partial class Cohere { + [AspireValue("FoundryModels")] public static readonly FoundryModel CohereCommandA; + [AspireValue("FoundryModels")] public static readonly FoundryModel CohereCommandR; + [AspireValue("FoundryModels")] public static readonly FoundryModel CohereCommandR082024; + [AspireValue("FoundryModels")] public static readonly FoundryModel CohereCommandRPlus; + [AspireValue("FoundryModels")] public static readonly FoundryModel CohereCommandRPlus082024; + [AspireValue("FoundryModels")] public static readonly FoundryModel CohereEmbedV3English; + [AspireValue("FoundryModels")] public static readonly FoundryModel CohereEmbedV3Multilingual; + [AspireValue("FoundryModels")] public static readonly FoundryModel CohereRerankV40Fast; + [AspireValue("FoundryModels")] public static readonly FoundryModel CohereRerankV40Pro; + [AspireValue("FoundryModels")] public static readonly FoundryModel EmbedV40; } @@ -341,67 +524,128 @@ public static partial class Core42 public static partial class DeepSeek { + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepSeekR1; + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepSeekR10528; + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepSeekV3; + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepSeekV30324; + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepSeekV31; + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepSeekV32; + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepSeekV32Speciale; } public static partial class Local { + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepseekR114b; + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepseekR115b; + [AspireValue("FoundryModels")] public static readonly FoundryModel DeepseekR17b; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptOss20b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Mistral7bV02; + [AspireValue("FoundryModels")] + public static readonly FoundryModel NemotronSpeechStreamingEn06b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi35Mini; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi3Mini128k; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi3Mini4k; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi4; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi4Mini; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi4MiniReasoning; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen2505b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen2514b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen2515b; [System.Obsolete("This test variant is no longer available. Use Qwen2515b instead.")] [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public static readonly FoundryModel Qwen2515bInstructTestVitisNpu; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen257b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen25Coder05b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen25Coder14b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen25Coder15b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen25Coder7b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen306b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen314b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen317b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen34b; + [AspireValue("FoundryModels")] + public static readonly FoundryModel Qwen3508b; + [AspireValue("FoundryModels")] + public static readonly FoundryModel Qwen352b; + [AspireValue("FoundryModels")] + public static readonly FoundryModel Qwen354b; + [AspireValue("FoundryModels")] + public static readonly FoundryModel Qwen359b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen38b; + [AspireValue("FoundryModels")] + public static readonly FoundryModel Qwen3Embedding06b; + [AspireValue("FoundryModels")] + public static readonly FoundryModel Qwen3Embedding8b; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen3Vl2bInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen3Vl4bInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Qwen3Vl8bInstruct; } public static partial class Meta { + [AspireValue("FoundryModels")] public static readonly FoundryModel Llama3211BVisionInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Llama3290BVisionInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Llama3370BInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Llama4Maverick17B128EInstructFP8; + [AspireValue("FoundryModels")] public static readonly FoundryModel Llama4Scout17B16EInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel MetaLlama31405BInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel MetaLlama3170BInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel MetaLlama318BInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel MetaLlama370BInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel MetaLlama38BInstruct; } public static partial class Microsoft { + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureAIContentSafety; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureAIContentUnderstanding; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureAIDocumentIntelligence; [System.Obsolete("Azure AI Language has been replaced with more granular services. Use AzureLanguageLanguageDetection, AzureLanguageTextPiiRedaction, or other specific services instead.")] [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -409,35 +653,70 @@ public static partial class Microsoft [System.Obsolete("Azure AI Translator has been replaced with more granular services. Use AzureTranslatorTextTranslation or AzureTranslatorDocumentTranslation instead.")] [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public static readonly FoundryModel AzureAITranslator; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureAIVision; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureContentUnderstandingLayout; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureContentUnderstandingRead; + [AspireValue("FoundryModels")] + public static readonly FoundryModel AzureLanguageConversationalPiiRedaction; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureLanguageLanguageDetection; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureLanguageTextPiiRedaction; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureSpeechSpeechToText; + [AspireValue("FoundryModels")] + public static readonly FoundryModel AzureSpeechSpeechTranslation; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureSpeechTextToSpeech; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureSpeechTextToSpeechAvatar; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureSpeechVoiceLive; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureTranslatorDocumentTranslation; + [AspireValue("FoundryModels")] public static readonly FoundryModel AzureTranslatorTextTranslation; [System.Obsolete("Use AzureLanguageLanguageDetection instead.")] [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public static readonly FoundryModel LanguageDetection; + [AspireValue("FoundryModels")] public static readonly FoundryModel MaiDSR1; + [AspireValue("FoundryModels")] + public static readonly FoundryModel MaiTranscribe1; + [AspireValue("FoundryModels")] + public static readonly FoundryModel MaiVoice1; + [AspireValue("FoundryModels")] public static readonly FoundryModel ModelRouter; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi35MiniInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi35MoEInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi35VisionInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi3Medium128kInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi3Medium4kInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi3Mini128kInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi3Mini4kInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi3Small128kInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi3Small8kInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi4; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi4MiniInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi4MiniReasoning; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi4MultimodalInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Phi4Reasoning; [System.Obsolete("Use AzureLanguageTextPiiRedaction instead.")] [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -446,114 +725,213 @@ public static partial class Microsoft public static partial class MistralAI { + [AspireValue("FoundryModels")] public static readonly FoundryModel Codestral2501; + [AspireValue("FoundryModels")] public static readonly FoundryModel Ministral3B; + [AspireValue("FoundryModels")] public static readonly FoundryModel MistralDocumentAi2505; + [AspireValue("FoundryModels")] public static readonly FoundryModel MistralDocumentAi2512; + [AspireValue("FoundryModels")] public static readonly FoundryModel MistralLarge2407; + [AspireValue("FoundryModels")] public static readonly FoundryModel MistralLarge2411; + [AspireValue("FoundryModels")] public static readonly FoundryModel MistralLarge3; + [AspireValue("FoundryModels")] public static readonly FoundryModel MistralMedium2505; + [AspireValue("FoundryModels")] public static readonly FoundryModel MistralNemo; + [AspireValue("FoundryModels")] public static readonly FoundryModel MistralSmall; + [AspireValue("FoundryModels")] public static readonly FoundryModel MistralSmall2503; } public static partial class OpenAI { + [AspireValue("FoundryModels")] public static readonly FoundryModel CodexMini; + [AspireValue("FoundryModels")] public static readonly FoundryModel ComputerUsePreview; + [AspireValue("FoundryModels")] public static readonly FoundryModel DallE3; + [AspireValue("FoundryModels")] public static readonly FoundryModel Davinci002; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt35Turbo; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt35Turbo16k; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt35TurboInstruct; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt41; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt41Mini; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt41Nano; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt432k; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt45Preview; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4o; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4oAudioPreview; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4oMini; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4oMiniAudioPreview; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4oMiniRealtimePreview; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4oMiniTranscribe; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4oMiniTts; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4oRealtimePreview; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4oTranscribe; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt4oTranscribeDiarize; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt5; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt51; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt51Chat; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt51Codex; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt51CodexMax; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt51CodexMini; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt52; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt52Chat; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt52Codex; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt53Chat; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt53Codex; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt54; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt54Mini; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt54Nano; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt54Pro; + [AspireValue("FoundryModels")] + public static readonly FoundryModel Gpt55; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt5Chat; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt5Codex; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt5Mini; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt5Nano; + [AspireValue("FoundryModels")] public static readonly FoundryModel Gpt5Pro; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptAudio; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptAudio15; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptAudioMini; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptImage1; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptImage15; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptImage1Mini; + [AspireValue("FoundryModels")] + public static readonly FoundryModel GptImage2; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptOss120b; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptOss20b; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptRealtime; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptRealtime15; + [AspireValue("FoundryModels")] public static readonly FoundryModel GptRealtimeMini; + [AspireValue("FoundryModels")] public static readonly FoundryModel O1; + [AspireValue("FoundryModels")] public static readonly FoundryModel O1Mini; + [AspireValue("FoundryModels")] public static readonly FoundryModel O1Preview; + [AspireValue("FoundryModels")] public static readonly FoundryModel O3; + [AspireValue("FoundryModels")] public static readonly FoundryModel O3DeepResearch; + [AspireValue("FoundryModels")] public static readonly FoundryModel O3Mini; + [AspireValue("FoundryModels")] public static readonly FoundryModel O3Pro; + [AspireValue("FoundryModels")] public static readonly FoundryModel O4Mini; + [AspireValue("FoundryModels")] public static readonly FoundryModel Sora; + [AspireValue("FoundryModels")] public static readonly FoundryModel TextEmbedding3Large; + [AspireValue("FoundryModels")] public static readonly FoundryModel TextEmbedding3Small; + [AspireValue("FoundryModels")] public static readonly FoundryModel TextEmbeddingAda002; + [AspireValue("FoundryModels")] public static readonly FoundryModel Tts; + [AspireValue("FoundryModels")] public static readonly FoundryModel TtsHd; + [AspireValue("FoundryModels")] public static readonly FoundryModel Whisper; } public static partial class StabilityAI { + [AspireValue("FoundryModels")] public static readonly FoundryModel StableDiffusion35Large; + [AspireValue("FoundryModels")] public static readonly FoundryModel StableImageCore; + [AspireValue("FoundryModels")] public static readonly FoundryModel StableImageUltra; } public static partial class XAI { + [AspireValue("FoundryModels")] public static readonly FoundryModel Grok3; + [AspireValue("FoundryModels")] public static readonly FoundryModel Grok3Mini; + [AspireValue("FoundryModels")] public static readonly FoundryModel Grok4; + [AspireValue("FoundryModels")] public static readonly FoundryModel Grok41FastNonReasoning; + [AspireValue("FoundryModels")] public static readonly FoundryModel Grok41FastReasoning; + [AspireValue("FoundryModels")] + public static readonly FoundryModel Grok420NonReasoning; + [AspireValue("FoundryModels")] + public static readonly FoundryModel Grok420Reasoning; + [AspireValue("FoundryModels")] public static readonly FoundryModel Grok4FastNonReasoning; + [AspireValue("FoundryModels")] public static readonly FoundryModel Grok4FastReasoning; + [AspireValue("FoundryModels")] public static readonly FoundryModel GrokCodeFast1; } } [AspireExport] - public partial class FoundryResource : Azure.AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class FoundryResource : Azure.AzureProvisioningResource, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, Azure.IAzurePrivateEndpointTarget, Azure.IAzureNspAssociationTarget { public FoundryResource(string name, System.Action configureInfrastructure) : base(default!, default!) { } @@ -569,6 +947,8 @@ public FoundryResource(string name, System.Action> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } + + System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateDnsZoneNames() { throw null; } + + System.Collections.Generic.IEnumerable Azure.IAzurePrivateEndpointTarget.GetPrivateLinkGroupIds() { throw null; } + } + + [AspireExport] + public abstract partial class FoundryToolResource : ApplicationModel.Resource, IFoundryTool + { + protected FoundryToolResource(string name, AzureCognitiveServicesProjectResource project) : base(default!) { } + + public AzureCognitiveServicesProjectResource Project { get { throw null; } } + + public abstract System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default); + } + + [AspireExport] + public sealed partial class FunctionToolResource : FoundryToolResource + { + public FunctionToolResource(string name, AzureCognitiveServicesProjectResource project, string functionName, System.BinaryData parameters, string? description = null, bool? strictModeEnabled = null) : base(default!, default!) { } + + public string? Description { get { throw null; } } + + public string FunctionName { get { throw null; } } + + public System.BinaryData Parameters { get { throw null; } } + + public bool? StrictModeEnabled { get { throw null; } } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } } [AspireExport(ExposeProperties = true)] @@ -587,10 +997,10 @@ public partial class HostedAgentConfiguration public HostedAgentConfiguration(string image) { } [AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")] - public System.Collections.Generic.IList ContainerProtocolVersions { get { throw null; } init { } } + public System.Collections.Generic.IList ContainerProtocolVersions { get { throw null; } init { } } [AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")] - public global::Azure.AI.Projects.OpenAI.ContentFilterConfiguration? ContentFilterConfiguration { get { throw null; } set { } } + public global::Azure.AI.Projects.Agents.ContentFilterConfiguration? ContentFilterConfiguration { get { throw null; } set { } } public decimal Cpu { get { throw null; } set { } } @@ -612,24 +1022,22 @@ public HostedAgentConfiguration(string image) { } public System.Collections.Generic.IDictionary Metadata { get { throw null; } init { } } [AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")] - public System.Collections.Generic.IList Tools { get { throw null; } init { } } + public System.Collections.Generic.IList Tools { get { throw null; } init { } } - public global::Azure.AI.Projects.AgentVersionCreationOptions ToAgentVersionCreationOptions() { throw null; } + public global::Azure.AI.Projects.Agents.ProjectsAgentVersionCreationOptions ToProjectsAgentVersionCreationOptions() { throw null; } } - public partial class PromptAgentConfiguration + public partial interface IFoundryTool { - public PromptAgentConfiguration(string model, string? instructions) { } - - public string Description { get { throw null; } set { } } - - public string? Instructions { get { throw null; } set { } } - - public System.Collections.Generic.IDictionary Metadata { get { throw null; } init { } } + System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default); + } - public string Model { get { throw null; } set { } } + [AspireExport] + public sealed partial class ImageGenerationToolResource : FoundryToolResource + { + public ImageGenerationToolResource(string name, AzureCognitiveServicesProjectResource project) : base(default!, default!) { } - public global::Azure.AI.Projects.AgentVersionCreationOptions ToAgentVersionCreationOptions() { throw null; } + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } } public partial class PublicHostingCognitiveServicesCapabilityHostProperties : global::Azure.Provisioning.CognitiveServices.CognitiveServicesCapabilityHostProperties @@ -637,6 +1045,16 @@ public partial class PublicHostingCognitiveServicesCapabilityHostProperties : gl protected override void DefineProvisionableProperties() { } } + [AspireExport] + public sealed partial class SharePointToolResource : FoundryToolResource + { + public SharePointToolResource(string name, AzureCognitiveServicesProjectResource project, params string[] projectConnectionIds) : base(default!, default!) { } + + public System.Collections.Generic.IList ProjectConnectionIds { get { throw null; } } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + } + public partial class StaticValueProvider : ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider { public StaticValueProvider() { } @@ -649,4 +1067,12 @@ public StaticValueProvider(T value) { } public void Set(T value) { } } + + [AspireExport] + public sealed partial class WebSearchToolResource : FoundryToolResource + { + public WebSearchToolResource(string name, AzureCognitiveServicesProjectResource project) : base(default!, default!) { } + + public override System.Threading.Tasks.Task ToAgentToolAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + } } \ No newline at end of file diff --git a/src/Aspire.Hosting.Garnet/api/Aspire.Hosting.Garnet.cs b/src/Aspire.Hosting.Garnet/api/Aspire.Hosting.Garnet.cs index ed6a239e4f1..e3c252d060a 100644 --- a/src/Aspire.Hosting.Garnet/api/Aspire.Hosting.Garnet.cs +++ b/src/Aspire.Hosting.Garnet/api/Aspire.Hosting.Garnet.cs @@ -16,16 +16,16 @@ public static partial class GarnetBuilderExtensions [AspireExportIgnore(Reason = "Use the dedicated polyglot overload instead.")] public static ApplicationModel.IResourceBuilder AddGarnet(this IDistributedApplicationBuilder builder, string name, int? port) { throw null; } - [AspireExport("withDataBindMount", Description = "Mounts a host directory as the Garnet data directory.")] + [AspireExport(Description = "Mounts a host directory as the Garnet data directory.")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a persistent data volume to the Garnet resource.")] + [AspireExport(Description = "Adds a persistent data volume to the Garnet resource.")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } [System.Obsolete("This method is obsolete and will be removed in a future version. Use the overload without the keysChangedThreshold parameter.")] public static ApplicationModel.IResourceBuilder WithPersistence(this ApplicationModel.IResourceBuilder builder, System.TimeSpan? interval, long keysChangedThreshold) { throw null; } - [AspireExport("withPersistence", Description = "Configures snapshot persistence for the Garnet resource.")] + [AspireExport(Description = "Configures snapshot persistence for the Garnet resource.")] public static ApplicationModel.IResourceBuilder WithPersistence(this ApplicationModel.IResourceBuilder builder, System.TimeSpan? interval = null) { throw null; } } } @@ -33,7 +33,7 @@ public static partial class GarnetBuilderExtensions namespace Aspire.Hosting.ApplicationModel { [AspireExport(ExposeProperties = true)] - public partial class GarnetResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class GarnetResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public GarnetResource(string name, ParameterResource password) : base(default!, default) { } diff --git a/src/Aspire.Hosting.GitHub.Models/api/Aspire.Hosting.GitHub.Models.cs b/src/Aspire.Hosting.GitHub.Models/api/Aspire.Hosting.GitHub.Models.cs index b15ad1d20fd..8cf0abde572 100644 --- a/src/Aspire.Hosting.GitHub.Models/api/Aspire.Hosting.GitHub.Models.cs +++ b/src/Aspire.Hosting.GitHub.Models/api/Aspire.Hosting.GitHub.Models.cs @@ -16,10 +16,10 @@ public static partial class GitHubModelsExtensions [AspireExportIgnore(Reason = "The polyglot overload uses the GitHubModelName enum instead. See the internal AddGitHubModel(GitHubModelName) overload.")] public static ApplicationModel.IResourceBuilder AddGitHubModel(this IDistributedApplicationBuilder builder, string name, string model, ApplicationModel.IResourceBuilder? organization = null) { throw null; } - [AspireExport("withApiKey", Description = "Configures the API key for the GitHub Model resource.")] + [AspireExport(Description = "Configures the API key for the GitHub Model resource.")] public static ApplicationModel.IResourceBuilder WithApiKey(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder apiKey) { throw null; } - [AspireExport("enableHealthCheck", Description = "Adds a health check for the GitHub Model resource.")] + [AspireExport("enableHealthCheck", MethodName = "withHealthCheck", Description = "Adds a health check for the GitHub Model resource.")] public static ApplicationModel.IResourceBuilder WithHealthCheck(this ApplicationModel.IResourceBuilder builder) { throw null; } } } @@ -132,7 +132,7 @@ public static partial class XAI namespace Aspire.Hosting.GitHub.Models { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Model = {Model}")] - public partial class GitHubModelResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class GitHubModelResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public GitHubModelResource(string name, string model, ApplicationModel.ParameterResource? organization, ApplicationModel.ParameterResource key) : base(default!) { } diff --git a/src/Aspire.Hosting.JavaScript/api/Aspire.Hosting.JavaScript.cs b/src/Aspire.Hosting.JavaScript/api/Aspire.Hosting.JavaScript.cs index 81f491bcfe9..b966c771f94 100644 --- a/src/Aspire.Hosting.JavaScript/api/Aspire.Hosting.JavaScript.cs +++ b/src/Aspire.Hosting.JavaScript/api/Aspire.Hosting.JavaScript.cs @@ -10,44 +10,72 @@ namespace Aspire.Hosting { public static partial class JavaScriptHostingExtensions { - [AspireExport("addJavaScriptApp", Description = "Adds a JavaScript application resource")] + [AspireExport(Description = "Adds a JavaScript application resource")] public static ApplicationModel.IResourceBuilder AddJavaScriptApp(this IDistributedApplicationBuilder builder, string name, string appDirectory, string runScriptName = "dev") { throw null; } - [AspireExport("addNodeApp", Description = "Adds a Node.js application resource")] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREJAVASCRIPT001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireExport(Description = "Adds a Next.js application resource")] + public static ApplicationModel.IResourceBuilder AddNextJsApp(this IDistributedApplicationBuilder builder, string name, string appDirectory, string runScriptName = "dev") { throw null; } + + [AspireExport(Description = "Adds a Node.js application resource")] public static ApplicationModel.IResourceBuilder AddNodeApp(this IDistributedApplicationBuilder builder, string name, string appDirectory, string scriptPath) { throw null; } - [AspireExport("addViteApp", Description = "Adds a Vite application resource")] + [AspireExport(Description = "Adds a Vite application resource")] public static ApplicationModel.IResourceBuilder AddViteApp(this IDistributedApplicationBuilder builder, string name, string appDirectory, string runScriptName = "dev") { throw null; } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREJAVASCRIPT001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireExport(Description = "Disables deploy-time build validation checks for the Next.js application.")] + public static ApplicationModel.IResourceBuilder DisableBuildValidation(this ApplicationModel.IResourceBuilder builder) { throw null; } + + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREJAVASCRIPT001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireExport(Description = "Publishes the JavaScript application as a standalone Node.js server that runs a built artifact directly.")] + public static ApplicationModel.IResourceBuilder PublishAsNodeServer(this ApplicationModel.IResourceBuilder builder, string entryPoint, string outputPath = ".") + where TResource : JavaScript.JavaScriptAppResource { throw null; } + + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREJAVASCRIPT001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireExport(Description = "Publishes the JavaScript application as a Node.js server that uses a package manager script at runtime.")] + public static ApplicationModel.IResourceBuilder PublishAsNpmScript(this ApplicationModel.IResourceBuilder builder, string startScriptName = "start", string? runScriptArguments = null) + where TResource : JavaScript.JavaScriptAppResource { throw null; } + + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREJAVASCRIPT001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireExportIgnore(Reason = "Use the polyglot-compatible overload instead.")] + public static ApplicationModel.IResourceBuilder PublishAsStaticWebsite(this ApplicationModel.IResourceBuilder builder, System.Action? configure = null) + where TResource : JavaScript.JavaScriptAppResource { throw null; } + + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREJAVASCRIPT001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireExportIgnore(Reason = "Use the polyglot-compatible overload instead.")] + public static ApplicationModel.IResourceBuilder PublishAsStaticWebsite(this ApplicationModel.IResourceBuilder builder, string apiPath, ApplicationModel.IResourceBuilder apiTarget, System.Action? configure = null) + where TResource : JavaScript.JavaScriptAppResource { throw null; } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREEXTENSION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] - [AspireExport("withBrowserDebugger", Description = "Configures a browser debugger for the JavaScript application")] + [AspireExport(Description = "Configures a browser debugger for the JavaScript application")] public static ApplicationModel.IResourceBuilder WithBrowserDebugger(this ApplicationModel.IResourceBuilder builder, string browser = "msedge") where T : JavaScript.JavaScriptAppResource { throw null; } - [AspireExport("withBuildScript", Description = "Specifies an npm script to run before starting the application")] + [AspireExport(Description = "Specifies an npm script to run before starting the application")] public static ApplicationModel.IResourceBuilder WithBuildScript(this ApplicationModel.IResourceBuilder resource, string scriptName, string[]? args = null) where TResource : JavaScript.JavaScriptAppResource { throw null; } - [AspireExport("withBun", Description = "Configures Bun as the package manager")] + [AspireExport(Description = "Configures Bun as the package manager")] public static ApplicationModel.IResourceBuilder WithBun(this ApplicationModel.IResourceBuilder resource, bool install = true, string[]? installArgs = null) where TResource : JavaScript.JavaScriptAppResource { throw null; } - [AspireExport("withNpm", Description = "Configures npm as the package manager")] + [AspireExport(Description = "Configures npm as the package manager")] public static ApplicationModel.IResourceBuilder WithNpm(this ApplicationModel.IResourceBuilder resource, bool install = true, string? installCommand = null, string[]? installArgs = null) where TResource : JavaScript.JavaScriptAppResource { throw null; } - [AspireExport("withPnpm", Description = "Configures pnpm as the package manager")] + [AspireExport(Description = "Configures pnpm as the package manager")] public static ApplicationModel.IResourceBuilder WithPnpm(this ApplicationModel.IResourceBuilder resource, bool install = true, string[]? installArgs = null) where TResource : JavaScript.JavaScriptAppResource { throw null; } - [AspireExport("withRunScript", Description = "Specifies an npm script to run during development")] + [AspireExport(Description = "Specifies an npm script to run during development")] public static ApplicationModel.IResourceBuilder WithRunScript(this ApplicationModel.IResourceBuilder resource, string scriptName, string[]? args = null) where TResource : JavaScript.JavaScriptAppResource { throw null; } - [AspireExport("withViteConfig", Description = "Configures a custom Vite configuration file")] + [AspireExport(Description = "Configures a custom Vite configuration file")] public static ApplicationModel.IResourceBuilder WithViteConfig(this ApplicationModel.IResourceBuilder builder, string configPath) { throw null; } - [AspireExport("withYarn", Description = "Configures yarn as the package manager")] + [AspireExport(Description = "Configures yarn as the package manager")] public static ApplicationModel.IResourceBuilder WithYarn(this ApplicationModel.IResourceBuilder resource, bool install = true, string[]? installArgs = null) where TResource : JavaScript.JavaScriptAppResource { throw null; } } @@ -79,6 +107,8 @@ public sealed partial class JavaScriptInstallCommandAnnotation : ApplicationMode public JavaScriptInstallCommandAnnotation(string[] args) { } public string[] Args { get { throw null; } } + + public string? ProductionInstallArgs { get { throw null; } init { } } } public partial class JavaScriptInstallerResource : ApplicationModel.ExecutableResource @@ -120,12 +150,29 @@ public JavaScriptRunScriptAnnotation(string scriptName, string[]? args) { } public string ScriptName { get { throw null; } } } + [AspireExport(ExposeProperties = true)] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREJAVASCRIPT001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public partial class NextJsAppResource : JavaScriptAppResource + { + public NextJsAppResource(string name, string command, string workingDirectory) : base(default!, default!, default!) { } + } + [AspireExport(ExposeProperties = true)] public partial class NodeAppResource : JavaScriptAppResource, IResourceWithServiceDiscovery, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource, ApplicationModel.IContainerFilesDestinationResource { public NodeAppResource(string name, string command, string workingDirectory) : base(default!, default!, default!) { } } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREJAVASCRIPT001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public partial class PublishAsStaticWebsiteOptions + { + public string OutputPath { get { throw null; } set { } } + + public bool StripPrefix { get { throw null; } set { } } + + public string? TargetEndpointName { get { throw null; } set { } } + } + [AspireExport(ExposeProperties = true)] public partial class ViteAppResource : JavaScriptAppResource { diff --git a/src/Aspire.Hosting.Kafka/api/Aspire.Hosting.Kafka.cs b/src/Aspire.Hosting.Kafka/api/Aspire.Hosting.Kafka.cs index 87c05ab67f8..cc304a35ae2 100644 --- a/src/Aspire.Hosting.Kafka/api/Aspire.Hosting.Kafka.cs +++ b/src/Aspire.Hosting.Kafka/api/Aspire.Hosting.Kafka.cs @@ -10,24 +10,24 @@ namespace Aspire.Hosting { public static partial class KafkaBuilderExtensions { - [AspireExport("addKafka", Description = "Adds a Kafka container resource")] + [AspireExport(Description = "Adds a Kafka container resource")] public static ApplicationModel.IResourceBuilder AddKafka(this IDistributedApplicationBuilder builder, string name, int? port = null) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a data bind mount to the Kafka container")] + [AspireExport(Description = "Adds a data bind mount to the Kafka container")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a data volume to the Kafka container")] + [AspireExport(Description = "Adds a data volume to the Kafka container")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } - [AspireExport("withHostPort", Description = "Sets the host port for the Kafka UI container")] + [AspireExport(Description = "Sets the host port for the Kafka UI container")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } - [AspireExport("withKafkaUI", Description = "Adds a Kafka UI container to manage the Kafka resource", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds a Kafka UI container to manage the Kafka resource", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithKafkaUI(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) { throw null; } } [AspireExport(ExposeProperties = true)] - public partial class KafkaServerResource : ApplicationModel.ContainerResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEnvironment + public partial class KafkaServerResource : ApplicationModel.ContainerResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithEnvironment { public KafkaServerResource(string name) : base(default!, default) { } diff --git a/src/Aspire.Hosting.Keycloak/api/Aspire.Hosting.Keycloak.cs b/src/Aspire.Hosting.Keycloak/api/Aspire.Hosting.Keycloak.cs index 5a01a74e1f4..47a8b8e7fd4 100644 --- a/src/Aspire.Hosting.Keycloak/api/Aspire.Hosting.Keycloak.cs +++ b/src/Aspire.Hosting.Keycloak/api/Aspire.Hosting.Keycloak.cs @@ -10,25 +10,25 @@ namespace Aspire.Hosting { public static partial class KeycloakResourceBuilderExtensions { - [AspireExport("addKeycloak", Description = "Adds a Keycloak container resource")] + [AspireExport(Description = "Adds a Keycloak container resource")] public static ApplicationModel.IResourceBuilder AddKeycloak(this IDistributedApplicationBuilder builder, string name, int? port = null, ApplicationModel.IResourceBuilder? adminUsername = null, ApplicationModel.IResourceBuilder? adminPassword = null) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a data bind mount for Keycloak")] + [AspireExport(Description = "Adds a data bind mount for Keycloak")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a data volume for Keycloak")] + [AspireExport(Description = "Adds a data volume for Keycloak")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null) { throw null; } - [AspireExport("withDisabledFeatures", Description = "Disables Keycloak features")] + [AspireExport(Description = "Disables Keycloak features")] public static ApplicationModel.IResourceBuilder WithDisabledFeatures(this ApplicationModel.IResourceBuilder builder, params string[] features) { throw null; } - [AspireExport("withEnabledFeatures", Description = "Enables Keycloak features")] + [AspireExport(Description = "Enables Keycloak features")] public static ApplicationModel.IResourceBuilder WithEnabledFeatures(this ApplicationModel.IResourceBuilder builder, params string[] features) { throw null; } - [AspireExport("withOtlpExporterWithProtocol", Description = "Configures the OTLP exporter for Keycloak with a specific protocol")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withOtlpExporter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithOtlpExporter(this ApplicationModel.IResourceBuilder builder, OtlpProtocol protocol) { throw null; } - [AspireExport("withOtlpExporter", Description = "Configures the OTLP exporter for Keycloak")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withOtlpExporter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithOtlpExporter(this ApplicationModel.IResourceBuilder builder) { throw null; } [System.Obsolete("Use WithRealmImport(string import) instead.")] diff --git a/src/Aspire.Hosting.Kubernetes/api/Aspire.Hosting.Kubernetes.cs b/src/Aspire.Hosting.Kubernetes/api/Aspire.Hosting.Kubernetes.cs index c2a66831766..6390ad8e59d 100644 --- a/src/Aspire.Hosting.Kubernetes/api/Aspire.Hosting.Kubernetes.cs +++ b/src/Aspire.Hosting.Kubernetes/api/Aspire.Hosting.Kubernetes.cs @@ -8,18 +8,127 @@ //------------------------------------------------------------------------------ namespace Aspire.Hosting { + public static partial class KubernetesAspireDashboardResourceBuilderExtensions + { + [AspireExport(Description = "Enables or disables forwarded headers support for the Aspire dashboard")] + public static ApplicationModel.IResourceBuilder WithForwardedHeaders(this ApplicationModel.IResourceBuilder builder, bool enabled = true) { throw null; } + + [AspireExport(Description = "Sets the Kubernetes Service ports for the OTLP endpoints")] + public static ApplicationModel.IResourceBuilder WithOtlpServicePort(this ApplicationModel.IResourceBuilder builder, int? grpcPort = null, int? httpPort = null) { throw null; } + + [AspireExport(Description = "Sets the Kubernetes Service port for the Aspire dashboard")] + public static ApplicationModel.IResourceBuilder WithServicePort(this ApplicationModel.IResourceBuilder builder, int? port = null) { throw null; } + } + public static partial class KubernetesEnvironmentExtensions { - [AspireExport("addKubernetesEnvironment", Description = "Adds a Kubernetes publishing environment")] + [AspireExport(Description = "Adds a Kubernetes publishing environment")] public static ApplicationModel.IResourceBuilder AddKubernetesEnvironment(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("withProperties", Description = "Configures properties of a Kubernetes environment", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds a named node pool to a Kubernetes environment")] + public static ApplicationModel.IResourceBuilder AddNodePool(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } + + [AspireExport("configureDashboard", MethodName = "configureDashboard", Description = "Configures the Aspire dashboard resource for the Kubernetes environment", RunSyncOnBackgroundThread = true)] + public static ApplicationModel.IResourceBuilder WithDashboard(this ApplicationModel.IResourceBuilder builder, System.Action> configure) { throw null; } + + [AspireExport(Description = "Enables or disables the Aspire dashboard for the Kubernetes environment")] + public static ApplicationModel.IResourceBuilder WithDashboard(this ApplicationModel.IResourceBuilder builder, bool enabled = true) { throw null; } + + [AspireExport(Description = "Configures Helm chart deployment settings", RunSyncOnBackgroundThread = true)] + public static ApplicationModel.IResourceBuilder WithHelm(this ApplicationModel.IResourceBuilder builder, System.Action? configure = null) { throw null; } + + [AspireExport("withKubernetesNodePool", MethodName = "withNodePool", Description = "Schedules a workload on a specific Kubernetes node pool")] + public static ApplicationModel.IResourceBuilder WithNodePool(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder nodePool) + where T : ApplicationModel.IResource { throw null; } + + [AspireExport(Description = "Configures properties of a Kubernetes environment", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithProperties(this ApplicationModel.IResourceBuilder builder, System.Action configure) { throw null; } } + public static partial class KubernetesGatewayExtensions + { + [AspireExport(Description = "Adds a Kubernetes Gateway API Gateway resource")] + public static ApplicationModel.IResourceBuilder AddGateway(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } + + [AspireExport("withGatewayAnnotationParam", Description = "Adds a parameterized Kubernetes metadata annotation to a Gateway")] + public static ApplicationModel.IResourceBuilder WithGatewayAnnotation(this ApplicationModel.IResourceBuilder builder, string key, ApplicationModel.IResourceBuilder value) { throw null; } + + [AspireExport(Description = "Adds a Kubernetes metadata annotation to a Gateway")] + public static ApplicationModel.IResourceBuilder WithGatewayAnnotation(this ApplicationModel.IResourceBuilder builder, string key, string value) { throw null; } + + [AspireExport("withGatewayClassParam", Description = "Sets a parameterized GatewayClass for a Kubernetes Gateway")] + public static ApplicationModel.IResourceBuilder WithGatewayClass(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder className) { throw null; } + + [AspireExport(Description = "Sets the GatewayClass for a Kubernetes Gateway")] + public static ApplicationModel.IResourceBuilder WithGatewayClass(this ApplicationModel.IResourceBuilder builder, string className) { throw null; } + + [AspireExport("withGatewayHostnameParam", Description = "Adds a parameterized hostname to a Kubernetes Gateway")] + public static ApplicationModel.IResourceBuilder WithHostname(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder hostname) { throw null; } + + [AspireExport("withGatewayHostname", MethodName = "withHostname", Description = "Adds a hostname to a Kubernetes Gateway")] + public static ApplicationModel.IResourceBuilder WithHostname(this ApplicationModel.IResourceBuilder builder, string hostname) { throw null; } + + [AspireExport("withGatewayPathRoute", Description = "Adds a path-based route to a Kubernetes Gateway")] + public static ApplicationModel.IResourceBuilder WithRoute(this ApplicationModel.IResourceBuilder builder, string path, ApplicationModel.EndpointReference endpoint, Kubernetes.IngressPathType pathType = Kubernetes.IngressPathType.Prefix) { throw null; } + + [AspireExport("withGatewayHostRoute", Description = "Adds a host-and-path route to a Kubernetes Gateway")] + public static ApplicationModel.IResourceBuilder WithRoute(this ApplicationModel.IResourceBuilder builder, string host, string path, ApplicationModel.EndpointReference endpoint, Kubernetes.IngressPathType pathType = Kubernetes.IngressPathType.Prefix) { throw null; } + + [AspireExport("withGatewayTlsParam", Description = "Configures TLS on a Kubernetes Gateway with a parameterized secret")] + public static ApplicationModel.IResourceBuilder WithTls(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder secretName) { throw null; } + + [AspireExport("withGatewayTls", MethodName = "withTls", Description = "Configures TLS on a Kubernetes Gateway listener")] + public static ApplicationModel.IResourceBuilder WithTls(this ApplicationModel.IResourceBuilder builder, string secretName) { throw null; } + + [AspireExport("withGatewayTlsAuto", Description = "Configures TLS on a Kubernetes Gateway with an auto-generated secret")] + public static ApplicationModel.IResourceBuilder WithTls(this ApplicationModel.IResourceBuilder builder) { throw null; } + } + + public static partial class KubernetesIngressExtensions + { + [AspireExport(Description = "Adds a Kubernetes Ingress resource for HTTP routing")] + public static ApplicationModel.IResourceBuilder AddIngress(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } + + [AspireExport(Description = "Sets the default backend for a Kubernetes Ingress")] + public static ApplicationModel.IResourceBuilder WithDefaultBackend(this ApplicationModel.IResourceBuilder builder, ApplicationModel.EndpointReference endpoint) { throw null; } + + [AspireExport("withIngressHostnameParam", Description = "Adds a parameterized hostname to a Kubernetes Ingress")] + public static ApplicationModel.IResourceBuilder WithHostname(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder hostname) { throw null; } + + [AspireExport("withIngressHostname", MethodName = "withHostname", Description = "Adds a hostname to a Kubernetes Ingress")] + public static ApplicationModel.IResourceBuilder WithHostname(this ApplicationModel.IResourceBuilder builder, string hostname) { throw null; } + + [AspireExport("withIngressAnnotationParam", Description = "Adds a parameterized Kubernetes metadata annotation to an Ingress")] + public static ApplicationModel.IResourceBuilder WithIngressAnnotation(this ApplicationModel.IResourceBuilder builder, string key, ApplicationModel.IResourceBuilder value) { throw null; } + + [AspireExport(Description = "Adds a Kubernetes metadata annotation to a Kubernetes Ingress")] + public static ApplicationModel.IResourceBuilder WithIngressAnnotation(this ApplicationModel.IResourceBuilder builder, string key, string value) { throw null; } + + [AspireExport("withIngressClassParam", Description = "Sets a parameterized ingress class for a Kubernetes Ingress")] + public static ApplicationModel.IResourceBuilder WithIngressClass(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder className) { throw null; } + + [AspireExport(Description = "Sets the ingress class for a Kubernetes Ingress")] + public static ApplicationModel.IResourceBuilder WithIngressClass(this ApplicationModel.IResourceBuilder builder, string className) { throw null; } + + [AspireExport("withIngressPathRoute", Description = "Adds a path-based route to a Kubernetes Ingress")] + public static ApplicationModel.IResourceBuilder WithRoute(this ApplicationModel.IResourceBuilder builder, string path, ApplicationModel.EndpointReference endpoint, Kubernetes.IngressPathType pathType = Kubernetes.IngressPathType.Prefix) { throw null; } + + [AspireExport("withIngressHostRoute", Description = "Adds a host-and-path route to a Kubernetes Ingress")] + public static ApplicationModel.IResourceBuilder WithRoute(this ApplicationModel.IResourceBuilder builder, string host, string path, ApplicationModel.EndpointReference endpoint, Kubernetes.IngressPathType pathType = Kubernetes.IngressPathType.Prefix) { throw null; } + + [AspireExport("withIngressTlsParam", Description = "Configures TLS for a Kubernetes Ingress with a parameterized secret")] + public static ApplicationModel.IResourceBuilder WithTls(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder secretName) { throw null; } + + [AspireExport("withIngressTls", MethodName = "withTls", Description = "Configures TLS for a Kubernetes Ingress using a K8S secret")] + public static ApplicationModel.IResourceBuilder WithTls(this ApplicationModel.IResourceBuilder builder, string secretName) { throw null; } + + [AspireExport("withIngressTlsAuto", Description = "Configures TLS for a Kubernetes Ingress with an auto-generated secret")] + public static ApplicationModel.IResourceBuilder WithTls(this ApplicationModel.IResourceBuilder builder) { throw null; } + } + public static partial class KubernetesServiceExtensions { - [AspireExport("publishAsKubernetesService", Description = "Publishes the resource as a Kubernetes service")] + [AspireExport(Description = "Publishes the resource as a Kubernetes service")] public static ApplicationModel.IResourceBuilder PublishAsKubernetesService(this ApplicationModel.IResourceBuilder builder, System.Action configure) where T : ApplicationModel.IComputeResource { throw null; } } @@ -27,11 +136,98 @@ public static ApplicationModel.IResourceBuilder PublishAsKubernetesService namespace Aspire.Hosting.Kubernetes { + public sealed partial class HelmChartDescriptionAnnotation : ApplicationModel.IResourceAnnotation + { + public HelmChartDescriptionAnnotation(ApplicationModel.ReferenceExpression description) { } + + public ApplicationModel.ReferenceExpression Description { get { throw null; } } + } + + public sealed partial class HelmChartNameAnnotation : ApplicationModel.IResourceAnnotation + { + public HelmChartNameAnnotation(ApplicationModel.ReferenceExpression name) { } + + public ApplicationModel.ReferenceExpression Name { get { throw null; } } + } + + [AspireExport(ExposeMethods = true)] + public sealed partial class HelmChartOptions + { + internal HelmChartOptions() { } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withChartDescription dispatcher export.")] + public HelmChartOptions WithChartDescription(ApplicationModel.IResourceBuilder description) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withChartDescription dispatcher export.")] + public HelmChartOptions WithChartDescription(string description) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withChartName dispatcher export.")] + public HelmChartOptions WithChartName(ApplicationModel.IResourceBuilder name) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withChartName dispatcher export.")] + public HelmChartOptions WithChartName(string name) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withChartVersion dispatcher export.")] + public HelmChartOptions WithChartVersion(ApplicationModel.IResourceBuilder version) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withChartVersion dispatcher export.")] + public HelmChartOptions WithChartVersion(string version) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withNamespace dispatcher export.")] + public HelmChartOptions WithNamespace(ApplicationModel.IResourceBuilder @namespace) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withNamespace dispatcher export.")] + public HelmChartOptions WithNamespace(string @namespace) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withReleaseName dispatcher export.")] + public HelmChartOptions WithReleaseName(ApplicationModel.IResourceBuilder releaseName) { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the union-based withReleaseName dispatcher export.")] + public HelmChartOptions WithReleaseName(string releaseName) { throw null; } + } + + public sealed partial class HelmChartVersionAnnotation : ApplicationModel.IResourceAnnotation + { + public HelmChartVersionAnnotation(ApplicationModel.ReferenceExpression version) { } + + public ApplicationModel.ReferenceExpression Version { get { throw null; } } + } + + public sealed partial class HelmReleaseNameAnnotation : ApplicationModel.IResourceAnnotation + { + public HelmReleaseNameAnnotation(ApplicationModel.ReferenceExpression releaseName) { } + + public ApplicationModel.ReferenceExpression ReleaseName { get { throw null; } } + } + + public enum IngressPathType + { + Prefix = 0, + Exact = 1, + ImplementationSpecific = 2 + } + + [AspireExport(ExposeProperties = true)] + public partial class KubernetesAspireDashboardResource : ApplicationModel.ContainerResource + { + public KubernetesAspireDashboardResource(string name) : base(default!, default) { } + + public ApplicationModel.EndpointReference OtlpGrpcEndpoint { get { throw null; } } + + public ApplicationModel.EndpointReference PrimaryEndpoint { get { throw null; } } + } + + public sealed partial class KubernetesEnvironmentAnnotation : ApplicationModel.IResourceAnnotation + { + } + [AspireExport(ExposeProperties = true)] public sealed partial class KubernetesEnvironmentResource : ApplicationModel.Resource, ApplicationModel.IComputeEnvironmentResource, ApplicationModel.IResource { public KubernetesEnvironmentResource(string name) : base(default!) { } + public bool DashboardEnabled { get { throw null; } set { } } + public string DefaultImagePullPolicy { get { throw null; } set { } } public string DefaultServiceType { get { throw null; } set { } } @@ -44,16 +240,51 @@ public KubernetesEnvironmentResource(string name) : base(default!) { } public string DefaultStorageType { get { throw null; } set { } } - public string HelmChartDescription { get { throw null; } set { } } + public string? KubeConfigPath { get { throw null; } set { } } - public string HelmChartName { get { throw null; } set { } } - - public string HelmChartVersion { get { throw null; } set { } } + public ApplicationModel.IComputeEnvironmentResource? OwningComputeEnvironment { get { throw null; } set { } } [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMPUTE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public ApplicationModel.ReferenceExpression GetHostAddressExpression(ApplicationModel.EndpointReference endpointReference) { throw null; } } + [AspireExport] + public partial class KubernetesGatewayResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource + { + public KubernetesGatewayResource(string name, KubernetesEnvironmentResource environment) : base(default!) { } + + public ApplicationModel.ReferenceExpression? GatewayClassName { get { throw null; } set { } } + + public KubernetesEnvironmentResource Parent { get { throw null; } } + } + + [AspireExport] + public partial class KubernetesIngressResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource + { + public KubernetesIngressResource(string name, KubernetesEnvironmentResource environment) : base(default!) { } + + public ApplicationModel.ReferenceExpression? IngressClassName { get { throw null; } set { } } + + public KubernetesEnvironmentResource Parent { get { throw null; } } + } + + public sealed partial class KubernetesNamespaceAnnotation : ApplicationModel.IResourceAnnotation + { + public KubernetesNamespaceAnnotation(ApplicationModel.ReferenceExpression @namespace) { } + + public ApplicationModel.ReferenceExpression Namespace { get { throw null; } } + } + + [AspireExport] + public partial class KubernetesNodePoolResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource + { + public KubernetesNodePoolResource(string name, KubernetesEnvironmentResource environment) : base(default!) { } + + public string NodeSelectorLabelKey { get { throw null; } init { } } + + public KubernetesEnvironmentResource Parent { get { throw null; } } + } + [AspireExport(ExposeProperties = true)] public partial class KubernetesResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource { @@ -616,6 +847,78 @@ public sealed partial class FsGroupStrategyOptionsV1Beta1 public string Rule { get { throw null; } set { } } } + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class GatewayAllowedRoutesV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "namespaces")] + public GatewayRouteNamespacesV1? Namespaces { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class GatewayCertificateRefV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "name")] + public string Name { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class GatewayListenerV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "allowedRoutes")] + public GatewayAllowedRoutesV1? AllowedRoutes { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "hostname")] + public string? Hostname { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "name")] + public string Name { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "port")] + public int Port { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "protocol")] + public string Protocol { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "tls")] + public GatewayTlsConfigV1? Tls { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class GatewayRouteNamespacesV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "from")] + public string From { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class GatewaySpecV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "gatewayClassName")] + public string GatewayClassName { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "listeners")] + public System.Collections.Generic.List Listeners { get { throw null; } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class GatewayTlsConfigV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "certificateRefs")] + public System.Collections.Generic.List CertificateRefs { get { throw null; } } + + [YamlDotNet.Serialization.YamlMember(Alias = "mode")] + public string Mode { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class GatewayV1 : BaseKubernetesResource + { + public GatewayV1() : base(default!, default!) { } + + [YamlDotNet.Serialization.YamlMember(Alias = "spec")] + public GatewaySpecV1 Spec { get { throw null; } set { } } + } + [YamlDotNet.Serialization.YamlSerializable] public sealed partial class GrpcActionV1 { @@ -881,6 +1184,88 @@ public sealed partial class HttpIngressRuleValueV1 public System.Collections.Generic.List Paths { get { throw null; } } } + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class HttpRouteBackendRefV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "name")] + public string Name { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "port")] + public int Port { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class HttpRouteHeaderMatchV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "name")] + public string Name { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "type")] + public string Type { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "value")] + public string Value { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class HttpRouteMatchV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "headers")] + public System.Collections.Generic.List Headers { get { throw null; } } + + [YamlDotNet.Serialization.YamlMember(Alias = "path")] + public HttpRoutePathMatchV1? Path { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class HttpRouteParentRefV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "name")] + public string Name { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class HttpRoutePathMatchV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "type")] + public string Type { get { throw null; } set { } } + + [YamlDotNet.Serialization.YamlMember(Alias = "value")] + public string Value { get { throw null; } set { } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class HttpRouteRuleV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "backendRefs")] + public System.Collections.Generic.List BackendRefs { get { throw null; } } + + [YamlDotNet.Serialization.YamlMember(Alias = "matches")] + public System.Collections.Generic.List Matches { get { throw null; } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class HttpRouteSpecV1 + { + [YamlDotNet.Serialization.YamlMember(Alias = "hostnames")] + public System.Collections.Generic.List Hostnames { get { throw null; } } + + [YamlDotNet.Serialization.YamlMember(Alias = "parentRefs")] + public System.Collections.Generic.List ParentRefs { get { throw null; } } + + [YamlDotNet.Serialization.YamlMember(Alias = "rules")] + public System.Collections.Generic.List Rules { get { throw null; } } + } + + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class HttpRouteV1 : BaseKubernetesResource + { + public HttpRouteV1() : base(default!, default!) { } + + [YamlDotNet.Serialization.YamlMember(Alias = "spec")] + public HttpRouteSpecV1 Spec { get { throw null; } set { } } + } + [YamlDotNet.Serialization.YamlSerializable] public sealed partial class IdRangeV1Beta1 { @@ -1947,7 +2332,7 @@ public sealed partial class RollingUpdateDeploymentV1 public sealed partial class RollingUpdateStatefulSetStrategyV1 { [YamlDotNet.Serialization.YamlMember(Alias = "maxUnavailable")] - public int MaxUnavailable { get { throw null; } set { } } + public int? MaxUnavailable { get { throw null; } set { } } [YamlDotNet.Serialization.YamlMember(Alias = "partition")] public int? Partition { get { throw null; } set { } } @@ -2085,6 +2470,12 @@ public Service() : base(default!, default!) { } public ServiceSpecV1 Spec { get { throw null; } set { } } } + [YamlDotNet.Serialization.YamlSerializable] + public sealed partial class ServiceAccountV1 : BaseKubernetesResource + { + public ServiceAccountV1() : base(default!, default!) { } + } + [YamlDotNet.Serialization.YamlSerializable] public sealed partial class ServiceBackendPortV1 { diff --git a/src/Aspire.Hosting.Maui/api/Aspire.Hosting.Maui.cs b/src/Aspire.Hosting.Maui/api/Aspire.Hosting.Maui.cs index 3c7a39837b5..4cd29b2cbb1 100644 --- a/src/Aspire.Hosting.Maui/api/Aspire.Hosting.Maui.cs +++ b/src/Aspire.Hosting.Maui/api/Aspire.Hosting.Maui.cs @@ -10,7 +10,7 @@ namespace Aspire.Hosting { public static partial class MauiAndroidExtensions { - [AspireExport("addAndroidDevice", Description = "Adds an Android device resource for a .NET MAUI project.")] + [AspireExport(Description = "Adds an Android device resource for a .NET MAUI project.")] public static ApplicationModel.IResourceBuilder AddAndroidDevice(this ApplicationModel.IResourceBuilder builder, string name, string? deviceId = null) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the overload with the optional device ID parameter instead.")] @@ -19,7 +19,7 @@ public static partial class MauiAndroidExtensions [AspireExportIgnore(Reason = "Convenience overload. Use the overload with name and optional device ID instead.")] public static ApplicationModel.IResourceBuilder AddAndroidDevice(this ApplicationModel.IResourceBuilder builder) { throw null; } - [AspireExport("addAndroidEmulator", Description = "Adds an Android emulator resource for a .NET MAUI project.")] + [AspireExport(Description = "Adds an Android emulator resource for a .NET MAUI project.")] public static ApplicationModel.IResourceBuilder AddAndroidEmulator(this ApplicationModel.IResourceBuilder builder, string name, string? emulatorId = null) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the overload with the optional emulator ID parameter instead.")] @@ -31,7 +31,7 @@ public static partial class MauiAndroidExtensions public static partial class MauiiOSExtensions { - [AspireExport("addiOSDevice", Description = "Adds an iOS device resource for a .NET MAUI project.")] + [AspireExport(Description = "Adds an iOS device resource for a .NET MAUI project.")] public static ApplicationModel.IResourceBuilder AddiOSDevice(this ApplicationModel.IResourceBuilder builder, string name, string? deviceId = null) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the overload with the optional device UDID parameter instead.")] @@ -40,7 +40,7 @@ public static partial class MauiiOSExtensions [AspireExportIgnore(Reason = "Convenience overload. Use the overload with name and optional device UDID instead.")] public static ApplicationModel.IResourceBuilder AddiOSDevice(this ApplicationModel.IResourceBuilder builder) { throw null; } - [AspireExport("addiOSSimulator", Description = "Adds an iOS simulator resource for a .NET MAUI project.")] + [AspireExport(Description = "Adds an iOS simulator resource for a .NET MAUI project.")] public static ApplicationModel.IResourceBuilder AddiOSSimulator(this ApplicationModel.IResourceBuilder builder, string name, string? simulatorId = null) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the overload with the optional simulator UDID parameter instead.")] @@ -52,7 +52,7 @@ public static partial class MauiiOSExtensions public static partial class MauiMacCatalystExtensions { - [AspireExport("addMacCatalystDevice", Description = "Adds a Mac Catalyst platform resource for a .NET MAUI project.")] + [AspireExport(Description = "Adds a Mac Catalyst platform resource for a .NET MAUI project.")] public static ApplicationModel.IResourceBuilder AddMacCatalystDevice(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the named overload instead.")] @@ -61,20 +61,20 @@ public static partial class MauiMacCatalystExtensions public static partial class MauiOtlpExtensions { - [AspireExport("withOtlpDevTunnel", Description = "Configures a .NET MAUI platform resource to send OpenTelemetry data through a development tunnel.")] + [AspireExport(Description = "Configures a .NET MAUI platform resource to send OpenTelemetry data through a development tunnel.")] public static ApplicationModel.IResourceBuilder WithOtlpDevTunnel(this ApplicationModel.IResourceBuilder builder) where T : Maui.IMauiPlatformResource, ApplicationModel.IResourceWithEnvironment { throw null; } } public static partial class MauiProjectExtensions { - [AspireExport("addMauiProject", Description = "Adds a .NET MAUI project to the application model.")] + [AspireExport(Description = "Adds a .NET MAUI project to the application model.")] public static ApplicationModel.IResourceBuilder AddMauiProject(this IDistributedApplicationBuilder builder, string name, string projectPath) { throw null; } } public static partial class MauiWindowsExtensions { - [AspireExport("addWindowsDevice", Description = "Adds a Windows platform resource for a .NET MAUI project.")] + [AspireExport(Description = "Adds a Windows platform resource for a .NET MAUI project.")] public static ApplicationModel.IResourceBuilder AddWindowsDevice(this ApplicationModel.IResourceBuilder builder, string name) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the named overload instead.")] diff --git a/src/Aspire.Hosting.Milvus/api/Aspire.Hosting.Milvus.cs b/src/Aspire.Hosting.Milvus/api/Aspire.Hosting.Milvus.cs index 2705f3cac8e..0e7d095df08 100644 --- a/src/Aspire.Hosting.Milvus/api/Aspire.Hosting.Milvus.cs +++ b/src/Aspire.Hosting.Milvus/api/Aspire.Hosting.Milvus.cs @@ -10,26 +10,26 @@ namespace Aspire.Hosting { public static partial class MilvusBuilderExtensions { - [AspireExport("addDatabase", Description = "Adds a Milvus database resource to a Milvus server resource.")] + [AspireExport(Description = "Adds a Milvus database resource to a Milvus server resource.")] public static ApplicationModel.IResourceBuilder AddDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } - [AspireExport("addMilvus", Description = "Adds a Milvus server resource to the distributed application model.")] + [AspireExport(Description = "Adds a Milvus server resource to the distributed application model.")] public static ApplicationModel.IResourceBuilder AddMilvus(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? apiKey = null, int? grpcPort = null) { throw null; } - [AspireExport("withAttu", Description = "Adds the Attu administration tool for Milvus.", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds the Attu administration tool for Milvus.", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithAttu(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) where T : Milvus.MilvusServerResource { throw null; } [System.Obsolete("Use WithConfigurationFile instead.")] public static ApplicationModel.IResourceBuilder WithConfigurationBindMount(this ApplicationModel.IResourceBuilder builder, string configurationFilePath) { throw null; } - [AspireExport("withConfigurationFile", Description = "Copies a Milvus configuration file into the container.")] + [AspireExport(Description = "Copies a Milvus configuration file into the container.")] public static ApplicationModel.IResourceBuilder WithConfigurationFile(this ApplicationModel.IResourceBuilder builder, string configurationFilePath) { throw null; } - [AspireExport("withDataBindMount", Description = "Mounts a host directory as the Milvus data directory.")] + [AspireExport(Description = "Mounts a host directory as the Milvus data directory.")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a persistent data volume to the Milvus server resource.")] + [AspireExport(Description = "Adds a persistent data volume to the Milvus server resource.")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } } } @@ -38,7 +38,7 @@ namespace Aspire.Hosting.ApplicationModel { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Database = {DatabaseName}")] [AspireExport(ExposeProperties = true)] - public partial class MilvusDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class MilvusDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public MilvusDatabaseResource(string name, string databaseName, Milvus.MilvusServerResource parent) : base(default!) { } @@ -60,7 +60,7 @@ public AttuResource(string name) : base(default!, default) { } } [AspireExport(ExposeProperties = true)] - public partial class MilvusServerResource : ApplicationModel.ContainerResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class MilvusServerResource : ApplicationModel.ContainerResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public MilvusServerResource(string name, ApplicationModel.ParameterResource apiKey) : base(default!, default) { } diff --git a/src/Aspire.Hosting.MongoDB/api/Aspire.Hosting.MongoDB.cs b/src/Aspire.Hosting.MongoDB/api/Aspire.Hosting.MongoDB.cs index c0c9fffe882..57e9a02960c 100644 --- a/src/Aspire.Hosting.MongoDB/api/Aspire.Hosting.MongoDB.cs +++ b/src/Aspire.Hosting.MongoDB/api/Aspire.Hosting.MongoDB.cs @@ -10,32 +10,32 @@ namespace Aspire.Hosting { public static partial class MongoDBBuilderExtensions { - [AspireExport("addDatabase", Description = "Adds a MongoDB database resource")] + [AspireExport(Description = "Adds a MongoDB database resource")] public static ApplicationModel.IResourceBuilder AddDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } - [AspireExport("addMongoDB", Description = "Adds a MongoDB container resource")] + [AspireExport(Description = "Adds a MongoDB container resource")] public static ApplicationModel.IResourceBuilder AddMongoDB(this IDistributedApplicationBuilder builder, string name, int? port = null, ApplicationModel.IResourceBuilder? userName = null, ApplicationModel.IResourceBuilder? password = null) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the overload with optional userName and password parameters instead.")] public static ApplicationModel.IResourceBuilder AddMongoDB(this IDistributedApplicationBuilder builder, string name, int? port) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a bind mount for the MongoDB data folder")] + [AspireExport(Description = "Adds a bind mount for the MongoDB data folder")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a named volume for the MongoDB data folder")] + [AspireExport(Description = "Adds a named volume for the MongoDB data folder")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } - [AspireExport("withHostPort", Description = "Sets the host port for the Mongo Express resource")] + [AspireExport(Description = "Sets the host port for the Mongo Express resource")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } [System.Obsolete("Use WithInitFiles instead.")] [AspireExportIgnore(Reason = "Obsolete API. Use WithInitFiles instead.")] public static ApplicationModel.IResourceBuilder WithInitBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = true) { throw null; } - [AspireExport("withInitFiles", Description = "Copies init files into a MongoDB container")] + [AspireExport(Description = "Copies init files into a MongoDB container")] public static ApplicationModel.IResourceBuilder WithInitFiles(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } - [AspireExport("withMongoExpress", Description = "Adds a MongoExpress administration platform for MongoDB", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds a MongoExpress administration platform for MongoDB", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithMongoExpress(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) where T : ApplicationModel.MongoDBServerResource { throw null; } } @@ -45,7 +45,7 @@ namespace Aspire.Hosting.ApplicationModel { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Database = {DatabaseName}")] [AspireExport(ExposeProperties = true)] - public partial class MongoDBDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class MongoDBDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public MongoDBDatabaseResource(string name, string databaseName, MongoDBServerResource parent) : base(default!) { } @@ -61,7 +61,7 @@ public MongoDBDatabaseResource(string name, string databaseName, MongoDBServerRe } [AspireExport(ExposeProperties = true)] - public partial class MongoDBServerResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class MongoDBServerResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public MongoDBServerResource(string name, ParameterResource? userNameParameter, ParameterResource? passwordParameter) : base(default!, default) { } diff --git a/src/Aspire.Hosting.MySql/api/Aspire.Hosting.MySql.cs b/src/Aspire.Hosting.MySql/api/Aspire.Hosting.MySql.cs index a5b78b1f013..a1ab0d06cfb 100644 --- a/src/Aspire.Hosting.MySql/api/Aspire.Hosting.MySql.cs +++ b/src/Aspire.Hosting.MySql/api/Aspire.Hosting.MySql.cs @@ -10,34 +10,34 @@ namespace Aspire.Hosting { public static partial class MySqlBuilderExtensions { - [AspireExport("addDatabase", Description = "Adds a MySQL database")] + [AspireExport(Description = "Adds a MySQL database")] public static ApplicationModel.IResourceBuilder AddDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } - [AspireExport("addMySql", Description = "Adds a MySQL server resource")] + [AspireExport(Description = "Adds a MySQL server resource")] public static ApplicationModel.IResourceBuilder AddMySql(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? password = null, int? port = null) { throw null; } - [AspireExport("withCreationScript", Description = "Defines the SQL script for database creation")] + [AspireExport(Description = "Defines the SQL script for database creation")] public static ApplicationModel.IResourceBuilder WithCreationScript(this ApplicationModel.IResourceBuilder builder, string script) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a data bind mount for MySQL")] + [AspireExport(Description = "Adds a data bind mount for MySQL")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a data volume for MySQL")] + [AspireExport(Description = "Adds a data volume for MySQL")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } - [AspireExport("withHostPort", Description = "Sets the host port for phpMyAdmin")] + [AspireExport(Description = "Sets the host port for phpMyAdmin")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } [System.Obsolete("Use WithInitFiles instead.")] public static ApplicationModel.IResourceBuilder WithInitBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = true) { throw null; } - [AspireExport("withInitFiles", Description = "Copies init files to MySQL")] + [AspireExport(Description = "Copies init files to MySQL")] public static ApplicationModel.IResourceBuilder WithInitFiles(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } - [AspireExport("withPassword", Description = "Configures the MySQL password")] + [AspireExport(Description = "Configures the MySQL password")] public static ApplicationModel.IResourceBuilder WithPassword(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder password) { throw null; } - [AspireExport("withPhpMyAdmin", Description = "Adds phpMyAdmin management UI", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds phpMyAdmin management UI", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithPhpMyAdmin(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) where T : ApplicationModel.MySqlServerResource { throw null; } } @@ -47,7 +47,7 @@ namespace Aspire.Hosting.ApplicationModel { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Database = {DatabaseName}")] [AspireExport(ExposeProperties = true)] - public partial class MySqlDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class MySqlDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public MySqlDatabaseResource(string name, string databaseName, MySqlServerResource parent) : base(default!) { } @@ -65,7 +65,7 @@ public MySqlDatabaseResource(string name, string databaseName, MySqlServerResour } [AspireExport(ExposeProperties = true)] - public partial class MySqlServerResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class MySqlServerResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public MySqlServerResource(string name, ParameterResource password) : base(default!, default) { } diff --git a/src/Aspire.Hosting.Nats/api/Aspire.Hosting.Nats.cs b/src/Aspire.Hosting.Nats/api/Aspire.Hosting.Nats.cs index 77f004d4f4e..bc0098d1974 100644 --- a/src/Aspire.Hosting.Nats/api/Aspire.Hosting.Nats.cs +++ b/src/Aspire.Hosting.Nats/api/Aspire.Hosting.Nats.cs @@ -16,16 +16,16 @@ public static partial class NatsBuilderExtensions [AspireExportIgnore(Reason = "Use the dedicated polyglot overload instead.")] public static ApplicationModel.IResourceBuilder AddNats(this IDistributedApplicationBuilder builder, string name, int? port) { throw null; } - [AspireExport("withDataBindMount", Description = "Mounts a host directory as the NATS data directory.")] + [AspireExport(Description = "Mounts a host directory as the NATS data directory.")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a persistent data volume to the NATS resource.")] + [AspireExport(Description = "Adds a persistent data volume to the NATS resource.")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } [System.Obsolete("This method is obsolete and will be removed in a future version. Use the overload without the srcMountPath parameter and WithDataBindMount extension instead if you want to keep data locally.")] public static ApplicationModel.IResourceBuilder WithJetStream(this ApplicationModel.IResourceBuilder builder, string? srcMountPath = null) { throw null; } - [AspireExport("withJetStream", Description = "Configures the NATS resource to enable JetStream.")] + [AspireExport(Description = "Configures the NATS resource to enable JetStream.")] public static ApplicationModel.IResourceBuilder WithJetStream(this ApplicationModel.IResourceBuilder builder) { throw null; } } } @@ -33,7 +33,7 @@ public static partial class NatsBuilderExtensions namespace Aspire.Hosting.ApplicationModel { [AspireExport(ExposeProperties = true)] - public partial class NatsServerResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class NatsServerResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public NatsServerResource(string name, ParameterResource? userName, ParameterResource? password) : base(default!, default) { } diff --git a/src/Aspire.Hosting.OpenAI/api/Aspire.Hosting.OpenAI.cs b/src/Aspire.Hosting.OpenAI/api/Aspire.Hosting.OpenAI.cs index 33bbcb51550..45c3b60adbf 100644 --- a/src/Aspire.Hosting.OpenAI/api/Aspire.Hosting.OpenAI.cs +++ b/src/Aspire.Hosting.OpenAI/api/Aspire.Hosting.OpenAI.cs @@ -10,19 +10,19 @@ namespace Aspire.Hosting { public static partial class OpenAIExtensions { - [AspireExport("addModel", Description = "Adds an OpenAI model resource.")] + [AspireExport(Description = "Adds an OpenAI model resource.")] public static ApplicationModel.IResourceBuilder AddModel(this ApplicationModel.IResourceBuilder builder, string name, string model) { throw null; } - [AspireExport("addOpenAI", Description = "Adds an OpenAI resource to the distributed application model.")] + [AspireExport(Description = "Adds an OpenAI resource to the distributed application model.")] public static ApplicationModel.IResourceBuilder AddOpenAI(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("withApiKey", Description = "Configures the API key for the OpenAI resource.")] + [AspireExport(Description = "Configures the API key for the OpenAI resource.")] public static ApplicationModel.IResourceBuilder WithApiKey(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder apiKey) { throw null; } - [AspireExport("withEndpoint", Description = "Configures the endpoint URI for the OpenAI resource.")] + [AspireExport(Description = "Configures the endpoint URI for the OpenAI resource.")] public static ApplicationModel.IResourceBuilder WithEndpoint(this ApplicationModel.IResourceBuilder builder, string endpoint) { throw null; } - [AspireExport("withHealthCheck", Description = "Adds a health check for the OpenAI model resource.")] + [AspireExport(Description = "Adds a health check for the OpenAI model resource.")] public static ApplicationModel.IResourceBuilder WithHealthCheck(this ApplicationModel.IResourceBuilder builder) { throw null; } } } @@ -30,7 +30,7 @@ public static partial class OpenAIExtensions namespace Aspire.Hosting.OpenAI { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Model = {Model}")] - public partial class OpenAIModelResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public partial class OpenAIModelResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent, ApplicationModel.IResourceWithParent, ApplicationModel.IResource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public OpenAIModelResource(string name, string model, OpenAIResource parent) : base(default!) { } @@ -43,7 +43,7 @@ public OpenAIModelResource(string name, string model, OpenAIResource parent) : b System.Collections.Generic.IEnumerable> ApplicationModel.IResourceWithConnectionString.GetConnectionProperties() { throw null; } } - public sealed partial class OpenAIResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences + public sealed partial class OpenAIResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences { public OpenAIResource(string name, ApplicationModel.ParameterResource key) : base(default!) { } diff --git a/src/Aspire.Hosting.Oracle/api/Aspire.Hosting.Oracle.cs b/src/Aspire.Hosting.Oracle/api/Aspire.Hosting.Oracle.cs index 2f5ec096815..82f1367c8bb 100644 --- a/src/Aspire.Hosting.Oracle/api/Aspire.Hosting.Oracle.cs +++ b/src/Aspire.Hosting.Oracle/api/Aspire.Hosting.Oracle.cs @@ -10,25 +10,25 @@ namespace Aspire.Hosting { public static partial class OracleDatabaseBuilderExtensions { - [AspireExport("addDatabase", Description = "Adds an Oracle database resource to an Oracle server resource.")] + [AspireExport(Description = "Adds an Oracle database resource to an Oracle server resource.")] public static ApplicationModel.IResourceBuilder AddDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } - [AspireExport("addOracle", Description = "Adds an Oracle server resource to the distributed application model.")] + [AspireExport(Description = "Adds an Oracle server resource to the distributed application model.")] public static ApplicationModel.IResourceBuilder AddOracle(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? password = null, int? port = null) { throw null; } - [AspireExport("withDataBindMount", Description = "Mounts a host directory as the Oracle data directory.")] + [AspireExport(Description = "Mounts a host directory as the Oracle data directory.")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a persistent data volume to the Oracle server resource.")] + [AspireExport(Description = "Adds a persistent data volume to the Oracle server resource.")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null) { throw null; } - [AspireExport("withDbSetupBindMount", Description = "Mounts a host directory as the Oracle DB setup directory.")] + [AspireExport(Description = "Mounts a host directory as the Oracle DB setup directory.")] public static ApplicationModel.IResourceBuilder WithDbSetupBindMount(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } [System.Obsolete("Use WithInitFiles instead.")] public static ApplicationModel.IResourceBuilder WithInitBindMount(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } - [AspireExport("withInitFiles", Description = "Copies initialization files into the Oracle container.")] + [AspireExport(Description = "Copies initialization files into the Oracle container.")] public static ApplicationModel.IResourceBuilder WithInitFiles(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } } } @@ -37,7 +37,7 @@ namespace Aspire.Hosting.ApplicationModel { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Database = {DatabaseName}")] [AspireExport(ExposeProperties = true)] - public partial class OracleDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class OracleDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public OracleDatabaseResource(string name, string databaseName, OracleDatabaseServerResource parent) : base(default!) { } @@ -55,7 +55,7 @@ public OracleDatabaseResource(string name, string databaseName, OracleDatabaseSe } [AspireExport(ExposeProperties = true)] - public partial class OracleDatabaseServerResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class OracleDatabaseServerResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public OracleDatabaseServerResource(string name, ParameterResource password) : base(default!, default) { } diff --git a/src/Aspire.Hosting.Orleans/api/Aspire.Hosting.Orleans.cs b/src/Aspire.Hosting.Orleans/api/Aspire.Hosting.Orleans.cs index 44f917291aa..4dbd4957c3f 100644 --- a/src/Aspire.Hosting.Orleans/api/Aspire.Hosting.Orleans.cs +++ b/src/Aspire.Hosting.Orleans/api/Aspire.Hosting.Orleans.cs @@ -10,44 +10,44 @@ namespace Aspire.Hosting { public static partial class OrleansServiceClientExtensions { - [AspireExport("withOrleansClientReference", Description = "Adds an Orleans client reference to a resource")] + [AspireExport("withOrleansClientReference", MethodName = "withReference", Description = "Adds an Orleans client reference to a resource")] public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder builder, Orleans.OrleansServiceClient orleansServiceClient) where T : ApplicationModel.IResourceWithEnvironment, ApplicationModel.IResourceWithEndpoints { throw null; } } public static partial class OrleansServiceExtensions { - [AspireExport("addOrleans", Description = "Adds an Orleans service configuration")] + [AspireExport(Description = "Adds an Orleans service configuration")] public static Orleans.OrleansService AddOrleans(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("asClient", Description = "Creates an Orleans client view for the service")] + [AspireExport(Description = "Creates an Orleans client view for the service")] public static Orleans.OrleansServiceClient AsClient(this Orleans.OrleansService orleansService) { throw null; } [AspireExportIgnore(Reason = "IProviderConfiguration cannot be created directly by polyglot callers. Use the default provider overload instead.")] public static Orleans.OrleansService WithBroadcastChannel(this Orleans.OrleansService orleansServiceBuilder, string name, Orleans.IProviderConfiguration provider) { throw null; } - [AspireExport("withBroadcastChannel", Description = "Adds an Orleans broadcast channel provider")] + [AspireExport(Description = "Adds an Orleans broadcast channel provider")] public static Orleans.OrleansService WithBroadcastChannel(this Orleans.OrleansService orleansServiceBuilder, string name) { throw null; } [AspireExportIgnore(Reason = "ParameterResource handle overload is not needed in polyglot. Use the string overload instead.")] public static Orleans.OrleansService WithClusterId(this Orleans.OrleansService orleansServiceBuilder, ApplicationModel.IResourceBuilder clusterId) { throw null; } - [AspireExport("withClusterId", Description = "Sets the Orleans cluster ID")] + [AspireExport(Description = "Sets the Orleans cluster ID")] public static Orleans.OrleansService WithClusterId(this Orleans.OrleansService orleansServiceBuilder, string clusterId) { throw null; } - [AspireExport("withClustering", Description = "Configures Orleans clustering using a resource connection")] + [AspireExport(Description = "Configures Orleans clustering using a resource connection")] public static Orleans.OrleansService WithClustering(this Orleans.OrleansService orleansServiceBuilder, ApplicationModel.IResourceBuilder provider) { throw null; } [AspireExportIgnore(Reason = "IProviderConfiguration cannot be created directly by polyglot callers. Use the resource-based overload instead.")] public static Orleans.OrleansService WithClustering(this Orleans.OrleansService orleansServiceBuilder, Orleans.IProviderConfiguration provider) { throw null; } - [AspireExport("withDevelopmentClustering", Description = "Configures Orleans development clustering")] + [AspireExport(Description = "Configures Orleans development clustering")] public static Orleans.OrleansService WithDevelopmentClustering(this Orleans.OrleansService orleansServiceBuilder) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the overload with explicit provider name instead.")] public static Orleans.OrleansService WithGrainDirectory(this Orleans.OrleansService orleansServiceBuilder, ApplicationModel.IResourceBuilder provider) { throw null; } - [AspireExport("withGrainDirectory", Description = "Adds an Orleans grain directory provider")] + [AspireExport(Description = "Adds an Orleans grain directory provider")] public static Orleans.OrleansService WithGrainDirectory(this Orleans.OrleansService orleansServiceBuilder, string name, ApplicationModel.IResourceBuilder provider) { throw null; } [AspireExportIgnore(Reason = "IProviderConfiguration cannot be created directly by polyglot callers. Use the resource-based overload instead.")] @@ -56,26 +56,26 @@ public static partial class OrleansServiceExtensions [AspireExportIgnore(Reason = "Convenience overload. Use the overload with explicit provider name instead.")] public static Orleans.OrleansService WithGrainStorage(this Orleans.OrleansService orleansServiceBuilder, ApplicationModel.IResourceBuilder provider) { throw null; } - [AspireExport("withGrainStorage", Description = "Adds an Orleans grain storage provider")] + [AspireExport(Description = "Adds an Orleans grain storage provider")] public static Orleans.OrleansService WithGrainStorage(this Orleans.OrleansService orleansServiceBuilder, string name, ApplicationModel.IResourceBuilder provider) { throw null; } [AspireExportIgnore(Reason = "IProviderConfiguration cannot be created directly by polyglot callers. Use the resource-based overload instead.")] public static Orleans.OrleansService WithGrainStorage(this Orleans.OrleansService orleansServiceBuilder, string name, Orleans.IProviderConfiguration provider) { throw null; } - [AspireExport("withMemoryGrainStorage", Description = "Adds in-memory Orleans grain storage")] + [AspireExport(Description = "Adds in-memory Orleans grain storage")] public static Orleans.OrleansService WithMemoryGrainStorage(this Orleans.OrleansService orleansServiceBuilder, string name) { throw null; } - [AspireExport("withMemoryReminders", Description = "Configures in-memory Orleans reminders")] + [AspireExport(Description = "Configures in-memory Orleans reminders")] public static Orleans.OrleansService WithMemoryReminders(this Orleans.OrleansService orleansServiceBuilder) { throw null; } - [AspireExport("withMemoryStreaming", Description = "Adds in-memory Orleans streaming")] + [AspireExport(Description = "Adds in-memory Orleans streaming")] public static Orleans.OrleansService WithMemoryStreaming(this Orleans.OrleansService orleansServiceBuilder, string name) { throw null; } - [AspireExport("withOrleansReference", Description = "Adds an Orleans silo reference to a resource")] + [AspireExport("withOrleansReference", MethodName = "withReference", Description = "Adds an Orleans silo reference to a resource")] public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder builder, Orleans.OrleansService orleansService) where T : ApplicationModel.IResourceWithEnvironment, ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExport("withReminders", Description = "Configures Orleans reminder storage")] + [AspireExport(Description = "Configures Orleans reminder storage")] public static Orleans.OrleansService WithReminders(this Orleans.OrleansService orleansServiceBuilder, ApplicationModel.IResourceBuilder provider) { throw null; } [AspireExportIgnore(Reason = "IProviderConfiguration cannot be created directly by polyglot callers. Use the resource-based overload instead.")] @@ -84,13 +84,13 @@ public static ApplicationModel.IResourceBuilder WithReference(this Applica [AspireExportIgnore(Reason = "ParameterResource handle overload is not needed in polyglot. Use the string overload instead.")] public static Orleans.OrleansService WithServiceId(this Orleans.OrleansService orleansServiceBuilder, ApplicationModel.IResourceBuilder serviceId) { throw null; } - [AspireExport("withServiceId", Description = "Sets the Orleans service ID")] + [AspireExport(Description = "Sets the Orleans service ID")] public static Orleans.OrleansService WithServiceId(this Orleans.OrleansService orleansServiceBuilder, string serviceId) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the overload with explicit provider name instead.")] public static Orleans.OrleansService WithStreaming(this Orleans.OrleansService orleansServiceBuilder, ApplicationModel.IResourceBuilder provider) { throw null; } - [AspireExport("withStreaming", Description = "Adds an Orleans stream provider")] + [AspireExport(Description = "Adds an Orleans stream provider")] public static Orleans.OrleansService WithStreaming(this Orleans.OrleansService orleansServiceBuilder, string name, ApplicationModel.IResourceBuilder provider) { throw null; } [AspireExportIgnore(Reason = "IProviderConfiguration cannot be created directly by polyglot callers. Use the resource-based overload instead.")] diff --git a/src/Aspire.Hosting.PostgreSQL/api/Aspire.Hosting.PostgreSQL.cs b/src/Aspire.Hosting.PostgreSQL/api/Aspire.Hosting.PostgreSQL.cs index 46d123284ca..5e903cfa614 100644 --- a/src/Aspire.Hosting.PostgreSQL/api/Aspire.Hosting.PostgreSQL.cs +++ b/src/Aspire.Hosting.PostgreSQL/api/Aspire.Hosting.PostgreSQL.cs @@ -10,19 +10,19 @@ namespace Aspire.Hosting { public static partial class PostgresBuilderExtensions { - [AspireExport("addDatabase", Description = "Adds a PostgreSQL database")] + [AspireExport(Description = "Adds a PostgreSQL database")] public static ApplicationModel.IResourceBuilder AddDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } - [AspireExport("addPostgres", Description = "Adds a PostgreSQL server resource")] + [AspireExport(Description = "Adds a PostgreSQL server resource")] public static ApplicationModel.IResourceBuilder AddPostgres(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? userName = null, ApplicationModel.IResourceBuilder? password = null, int? port = null) { throw null; } - [AspireExport("withCreationScript", Description = "Defines the SQL script for database creation")] + [AspireExport(Description = "Defines the SQL script for database creation")] public static ApplicationModel.IResourceBuilder WithCreationScript(this ApplicationModel.IResourceBuilder builder, string script) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a data bind mount for PostgreSQL")] + [AspireExport(Description = "Adds a data bind mount for PostgreSQL")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a data volume for PostgreSQL")] + [AspireExport(Description = "Adds a data volume for PostgreSQL")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } [AspireExport("withPostgresHostPort", MethodName = "withHostPort", Description = "Sets the host port for PostgreSQL")] @@ -38,24 +38,24 @@ public static partial class PostgresBuilderExtensions [System.Obsolete("Use WithInitFiles instead.")] public static ApplicationModel.IResourceBuilder WithInitBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = true) { throw null; } - [AspireExport("withInitFiles", Description = "Copies init files to PostgreSQL")] + [AspireExport(Description = "Copies init files to PostgreSQL")] public static ApplicationModel.IResourceBuilder WithInitFiles(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } - [AspireExport("withPassword", Description = "Configures the PostgreSQL password")] + [AspireExport(Description = "Configures the PostgreSQL password")] public static ApplicationModel.IResourceBuilder WithPassword(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder password) { throw null; } - [AspireExport("withPgAdmin", Description = "Adds pgAdmin 4 management UI", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds pgAdmin 4 management UI", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithPgAdmin(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) where T : ApplicationModel.PostgresServerResource { throw null; } - [AspireExport("withPgWeb", Description = "Adds pgweb management UI", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds pgweb management UI", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithPgWeb(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) { throw null; } - [AspireExport("withPostgresMcp", Description = "Adds Postgres MCP server", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds Postgres MCP server", RunSyncOnBackgroundThread = true)] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPOSTGRES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder WithPostgresMcp(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) { throw null; } - [AspireExport("withUserName", Description = "Configures the PostgreSQL user name")] + [AspireExport(Description = "Configures the PostgreSQL user name")] public static ApplicationModel.IResourceBuilder WithUserName(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder userName) { throw null; } } } @@ -64,7 +64,7 @@ namespace Aspire.Hosting.ApplicationModel { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Database = {DatabaseName}")] [AspireExport(ExposeProperties = true)] - public partial class PostgresDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class PostgresDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public PostgresDatabaseResource(string name, string databaseName, PostgresServerResource postgresParentResource) : base(default!) { } @@ -82,7 +82,7 @@ public PostgresDatabaseResource(string name, string databaseName, PostgresServer } [AspireExport(ExposeProperties = true)] - public partial class PostgresServerResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class PostgresServerResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public PostgresServerResource(string name, ParameterResource? userName, ParameterResource password) : base(default!, default) { } diff --git a/src/Aspire.Hosting.Python/api/Aspire.Hosting.Python.cs b/src/Aspire.Hosting.Python/api/Aspire.Hosting.Python.cs index c7add995475..e3cf4f4bccc 100644 --- a/src/Aspire.Hosting.Python/api/Aspire.Hosting.Python.cs +++ b/src/Aspire.Hosting.Python/api/Aspire.Hosting.Python.cs @@ -18,35 +18,35 @@ public static partial class PythonAppResourceBuilderExtensions [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public static ApplicationModel.IResourceBuilder AddPythonApp(this IDistributedApplicationBuilder builder, string name, string appDirectory, string scriptPath, params string[] scriptArgs) { throw null; } - [AspireExport("addPythonApp", Description = "Adds a Python script application resource")] + [AspireExport(Description = "Adds a Python script application resource")] public static ApplicationModel.IResourceBuilder AddPythonApp(this IDistributedApplicationBuilder builder, string name, string appDirectory, string scriptPath) { throw null; } - [AspireExport("addPythonExecutable", Description = "Adds a Python executable application resource")] + [AspireExport(Description = "Adds a Python executable application resource")] public static ApplicationModel.IResourceBuilder AddPythonExecutable(this IDistributedApplicationBuilder builder, string name, string appDirectory, string executableName) { throw null; } - [AspireExport("addPythonModule", Description = "Adds a Python module application resource")] + [AspireExport(Description = "Adds a Python module application resource")] public static ApplicationModel.IResourceBuilder AddPythonModule(this IDistributedApplicationBuilder builder, string name, string appDirectory, string moduleName) { throw null; } - [AspireExport("addUvicornApp", Description = "Adds a Uvicorn-based Python application resource")] + [AspireExport(Description = "Adds a Uvicorn-based Python application resource")] public static ApplicationModel.IResourceBuilder AddUvicornApp(this IDistributedApplicationBuilder builder, string name, string appDirectory, string app) { throw null; } - [AspireExport("withDebugging", Description = "Enables debugging support for a Python application")] + [AspireExport(Description = "Enables debugging support for a Python application")] public static ApplicationModel.IResourceBuilder WithDebugging(this ApplicationModel.IResourceBuilder builder) where T : Python.PythonAppResource { throw null; } - [AspireExport("withEntrypoint", Description = "Configures the entrypoint for a Python application")] + [AspireExport(Description = "Configures the entrypoint for a Python application")] public static ApplicationModel.IResourceBuilder WithEntrypoint(this ApplicationModel.IResourceBuilder builder, Python.EntrypointType entrypointType, string entrypoint) where T : Python.PythonAppResource { throw null; } - [AspireExport("withPip", Description = "Configures pip package installation for a Python application")] + [AspireExport(Description = "Configures pip package installation for a Python application")] public static ApplicationModel.IResourceBuilder WithPip(this ApplicationModel.IResourceBuilder builder, bool install = true, string[]? installArgs = null) where T : Python.PythonAppResource { throw null; } - [AspireExport("withUv", Description = "Configures uv package management for a Python application")] + [AspireExport(Description = "Configures uv package management for a Python application")] public static ApplicationModel.IResourceBuilder WithUv(this ApplicationModel.IResourceBuilder builder, bool install = true, string[]? args = null) where T : Python.PythonAppResource { throw null; } - [AspireExport("withVirtualEnvironment", Description = "Configures the virtual environment for a Python application")] + [AspireExport(Description = "Configures the virtual environment for a Python application")] public static ApplicationModel.IResourceBuilder WithVirtualEnvironment(this ApplicationModel.IResourceBuilder builder, string virtualEnvironmentPath, bool createIfNotExists = true) where T : Python.PythonAppResource { throw null; } } diff --git a/src/Aspire.Hosting.Qdrant/api/Aspire.Hosting.Qdrant.cs b/src/Aspire.Hosting.Qdrant/api/Aspire.Hosting.Qdrant.cs index 92beb2b9cd9..bd8a78239f6 100644 --- a/src/Aspire.Hosting.Qdrant/api/Aspire.Hosting.Qdrant.cs +++ b/src/Aspire.Hosting.Qdrant/api/Aspire.Hosting.Qdrant.cs @@ -10,13 +10,13 @@ namespace Aspire.Hosting { public static partial class QdrantBuilderExtensions { - [AspireExport("addQdrant", Description = "Adds a Qdrant resource to the application. A container is used for local development.")] + [AspireExport(Description = "Adds a Qdrant resource to the application. A container is used for local development.")] public static ApplicationModel.IResourceBuilder AddQdrant(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? apiKey = null, int? grpcPort = null, int? httpPort = null) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a bind mount for the data folder to a Qdrant container resource.")] + [AspireExport(Description = "Adds a bind mount for the data folder to a Qdrant container resource.")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a named volume for the data folder to a Qdrant container resource.")] + [AspireExport(Description = "Adds a named volume for the data folder to a Qdrant container resource.")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } [AspireExportIgnore(Reason = "Polyglot app hosts use the generic withReference export.")] @@ -32,7 +32,7 @@ public static ApplicationModel.IResourceBuilder WithReference + public partial class QdrantServerResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences, IResourceWithCustomWithReference { public QdrantServerResource(string name, ParameterResource apiKey) : base(default!, default) { } diff --git a/src/Aspire.Hosting.RabbitMQ/api/Aspire.Hosting.RabbitMQ.cs b/src/Aspire.Hosting.RabbitMQ/api/Aspire.Hosting.RabbitMQ.cs index d49f5da480a..bb749cc0a68 100644 --- a/src/Aspire.Hosting.RabbitMQ/api/Aspire.Hosting.RabbitMQ.cs +++ b/src/Aspire.Hosting.RabbitMQ/api/Aspire.Hosting.RabbitMQ.cs @@ -10,19 +10,19 @@ namespace Aspire.Hosting { public static partial class RabbitMQBuilderExtensions { - [AspireExport("addRabbitMQ", Description = "Adds a RabbitMQ container resource")] + [AspireExport(Description = "Adds a RabbitMQ container resource")] public static ApplicationModel.IResourceBuilder AddRabbitMQ(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? userName = null, ApplicationModel.IResourceBuilder? password = null, int? port = null) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a data bind mount to the RabbitMQ container")] + [AspireExport(Description = "Adds a data bind mount to the RabbitMQ container")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a data volume to the RabbitMQ container")] + [AspireExport(Description = "Adds a data volume to the RabbitMQ container")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } - [AspireExport("withManagementPluginWithPort", Description = "Enables the RabbitMQ management plugin with a specific port")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withManagementPlugin dispatcher export.")] public static ApplicationModel.IResourceBuilder WithManagementPlugin(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } - [AspireExport("withManagementPlugin", Description = "Enables the RabbitMQ management plugin")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withManagementPlugin dispatcher export.")] public static ApplicationModel.IResourceBuilder WithManagementPlugin(this ApplicationModel.IResourceBuilder builder) { throw null; } } } @@ -30,7 +30,7 @@ public static partial class RabbitMQBuilderExtensions namespace Aspire.Hosting.ApplicationModel { [AspireExport(ExposeProperties = true)] - public partial class RabbitMQServerResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences, IResourceWithEnvironment + public partial class RabbitMQServerResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences, IResourceWithEnvironment { public RabbitMQServerResource(string name, ParameterResource? userName, ParameterResource password) : base(default!, default) { } diff --git a/src/Aspire.Hosting.Redis/api/Aspire.Hosting.Redis.cs b/src/Aspire.Hosting.Redis/api/Aspire.Hosting.Redis.cs index 1b6f8936980..ecd75e18c67 100644 --- a/src/Aspire.Hosting.Redis/api/Aspire.Hosting.Redis.cs +++ b/src/Aspire.Hosting.Redis/api/Aspire.Hosting.Redis.cs @@ -10,25 +10,25 @@ namespace Aspire.Hosting { public static partial class RedisBuilderExtensions { - [AspireExport("addRedis", Description = "Adds a Redis container resource")] + [AspireExport(Description = "Adds a Redis container resource")] public static ApplicationModel.IResourceBuilder AddRedis(this IDistributedApplicationBuilder builder, string name, int? port = null, ApplicationModel.IResourceBuilder? password = null) { throw null; } - [AspireExport("addRedisWithPort", Description = "Adds a Redis container resource with specific port")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the canonical addRedis export with options.")] public static ApplicationModel.IResourceBuilder AddRedis(this IDistributedApplicationBuilder builder, string name, int? port) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a data bind mount with persistence")] + [AspireExport(Description = "Adds a data bind mount with persistence")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } [AspireExport("withRedisInsightDataBindMount", MethodName = "withDataBindMount", Description = "Adds a data bind mount for Redis Insight")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a data volume with persistence")] + [AspireExport(Description = "Adds a data volume with persistence")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } [AspireExport("withRedisInsightDataVolume", Description = "Adds a data volume for Redis Insight", MethodName = "withDataVolume")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null) { throw null; } - [AspireExport("withHostPort", Description = "Sets the host port for Redis")] + [AspireExport(Description = "Sets the host port for Redis")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } [AspireExport("withRedisCommanderHostPort", MethodName = "withHostPort", Description = "Sets the host port for Redis Commander")] @@ -37,16 +37,16 @@ public static partial class RedisBuilderExtensions [AspireExport("withRedisInsightHostPort", MethodName = "withHostPort", Description = "Sets the host port for Redis Insight")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } - [AspireExport("withPassword", Description = "Configures the password for Redis")] + [AspireExport(Description = "Configures the password for Redis")] public static ApplicationModel.IResourceBuilder WithPassword(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder? password) { throw null; } - [AspireExport("withPersistence", Description = "Configures Redis persistence")] + [AspireExport(Description = "Configures Redis persistence")] public static ApplicationModel.IResourceBuilder WithPersistence(this ApplicationModel.IResourceBuilder builder, System.TimeSpan? interval = null, long keysChangedThreshold = 1) { throw null; } - [AspireExport("withRedisCommander", Description = "Adds Redis Commander management UI", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds Redis Commander management UI", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithRedisCommander(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) { throw null; } - [AspireExport("withRedisInsight", Description = "Adds Redis Insight management UI", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Adds Redis Insight management UI", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithRedisInsight(this ApplicationModel.IResourceBuilder builder, System.Action>? configureContainer = null, string? containerName = null) { throw null; } } } @@ -54,7 +54,7 @@ public static partial class RedisBuilderExtensions namespace Aspire.Hosting.ApplicationModel { [AspireExport(ExposeProperties = true)] - public partial class RedisResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class RedisResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public RedisResource(string name, ParameterResource password) : base(default!, default) { } diff --git a/src/Aspire.Hosting.Seq/api/Aspire.Hosting.Seq.cs b/src/Aspire.Hosting.Seq/api/Aspire.Hosting.Seq.cs index 470afdc4539..42fbb99955f 100644 --- a/src/Aspire.Hosting.Seq/api/Aspire.Hosting.Seq.cs +++ b/src/Aspire.Hosting.Seq/api/Aspire.Hosting.Seq.cs @@ -10,16 +10,16 @@ namespace Aspire.Hosting { public static partial class SeqBuilderExtensions { - [AspireExport("addSeq", Description = "Adds a Seq server container resource")] + [AspireExport(Description = "Adds a Seq server container resource")] public static ApplicationModel.IResourceBuilder AddSeq(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? adminPassword, int? port = null) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the overload with optional adminPassword parameter instead.")] public static ApplicationModel.IResourceBuilder AddSeq(this IDistributedApplicationBuilder builder, string name, int? port = null) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a data bind mount for Seq")] + [AspireExport(Description = "Adds a data bind mount for Seq")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a data volume for Seq")] + [AspireExport(Description = "Adds a data volume for Seq")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } } } @@ -27,7 +27,7 @@ public static partial class SeqBuilderExtensions namespace Aspire.Hosting.ApplicationModel { [AspireExport(ExposeProperties = true)] - public partial class SeqResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class SeqResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public SeqResource(string name) : base(default!, default) { } diff --git a/src/Aspire.Hosting.SqlServer/api/Aspire.Hosting.SqlServer.ats.txt b/src/Aspire.Hosting.SqlServer/api/Aspire.Hosting.SqlServer.ats.txt index dbbe55a1ee2..ff309474bcc 100644 --- a/src/Aspire.Hosting.SqlServer/api/Aspire.Hosting.SqlServer.ats.txt +++ b/src/Aspire.Hosting.SqlServer/api/Aspire.Hosting.SqlServer.ats.txt @@ -4,23 +4,257 @@ # Handle Types Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerDatabaseResource [ExposeProperties] Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.AfterResourcesCreatedEvent [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.BeforeResourceStartedEvent [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.BeforeStartEvent [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ConnectionStringAvailableEvent [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerRegistryResource +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/Aspire.Hosting.ApplicationModel.CSharpAppResource +Aspire.Hosting/Aspire.Hosting.ApplicationModel.DistributedApplicationModel +Aspire.Hosting/Aspire.Hosting.ApplicationModel.DotnetToolResource +Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference +Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReferenceExpression [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.EnvironmentCallbackContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecutableResource +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.IExpressionValue [interface] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.InitializeResourceEvent [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource [interface] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithArgs [interface] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithConnectionString [interface] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints [interface] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment [interface] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithParent [interface] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithWaitSupport [interface] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ProjectResource +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpressionBuilder [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceEndpointsAllocatedEvent [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceLoggerService +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceNotificationService +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceReadyEvent [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceStoppedEvent [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceUrlsCallbackContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ApplicationModel.UpdateCommandStateContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.ConnectionStringResource +Aspire.Hosting/Aspire.Hosting.DistributedApplication +Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContextOptions +Aspire.Hosting/Aspire.Hosting.Eventing.DistributedApplicationEventSubscription +Aspire.Hosting/Aspire.Hosting.Eventing.DistributedApplicationResourceEventSubscription +Aspire.Hosting/Aspire.Hosting.Eventing.IDistributedApplicationEvent [interface] +Aspire.Hosting/Aspire.Hosting.Eventing.IDistributedApplicationEventing [interface, ExposeMethods] +Aspire.Hosting/Aspire.Hosting.Eventing.IDistributedApplicationResourceEvent [interface] +Aspire.Hosting/Aspire.Hosting.ExternalServiceResource +Aspire.Hosting/Aspire.Hosting.IDistributedApplicationBuilder [interface] +Aspire.Hosting/Aspire.Hosting.IResourceWithContainerFiles [interface] +Aspire.Hosting/Aspire.Hosting.IUserSecretsManager [interface, ExposeProperties, ExposeMethods] +Aspire.Hosting/Aspire.Hosting.Pipelines.IReportingStep [interface] +Aspire.Hosting/Aspire.Hosting.Pipelines.IReportingTask [interface] +Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepFactoryContext [ExposeProperties] +Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineSummary [ExposeMethods] +Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions [ExposeProperties] +Microsoft.Extensions.Configuration.Abstractions/Microsoft.Extensions.Configuration.IConfiguration [interface] +Microsoft.Extensions.Configuration.Abstractions/Microsoft.Extensions.Configuration.IConfigurationSection [interface, ExposeProperties] +Microsoft.Extensions.Hosting.Abstractions/Microsoft.Extensions.Hosting.IHostEnvironment [interface, ExposeProperties] +Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger [interface] +Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILoggerFactory [interface] +System.ComponentModel/System.IServiceProvider [interface] +System.Private.CoreLib/System.Threading.CancellationToken + +# DTO Types +Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandOptions # Optional configuration for resource commands added with . + ConfirmationMessage: string # When a confirmation message is specified, the UI will prompt with an OK/Cancel dialog and the confirmation message before starting the command. + Description: string # Optional description of the command, to be shown in the UI. Could be used as a tooltip. May be localized. + IconName: string # The icon name for the command. The name should be a valid FluentUI icon name from . + IconVariant: enum:Aspire.Hosting.ApplicationModel.IconVariant # The icon variant. + IsHighlighted: boolean # A flag indicating whether the command is highlighted in the UI. + Parameter: any # Optional parameter that configures the command in some way. Clients must return any value provided by the server when invoking the command. + UpdateState: System.Private.CoreLib/System.Func`2[[Aspire.Hosting.ApplicationModel.UpdateCommandStateContext, Aspire.Hosting, Version=42.42.42.42, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51],[Aspire.Hosting.ApplicationModel.ResourceCommandState, Aspire.Hosting, Version=42.42.42.42, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]] # A callback that is used to update the command state. The callback is executed when the command's resource snapshot is updated.If a callback isn't specified, the command is always enabled. +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandResult # The result of executing a command. Returned from . + Canceled: boolean # A flag that indicates whether the command was canceled by the user. + ErrorMessage: string # An optional error message that can be set when the command is unsuccessful. + Success: boolean # A flag that indicates whether the command was successful. +Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceUrlAnnotation # A URL that should be displayed for a resource. + DisplayLocation: enum:Aspire.Hosting.ApplicationModel.UrlDisplayLocation # Locations where this URL should be shown on the dashboard. Defaults to . + DisplayText: string # The name of the URL. When rendered as a link this will be used as the linked text. + Endpoint: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference # The endpoint associated with this URL. Can be null if this URL is not associated with an endpoint. + Url: string # The URL. When rendered as a link this will be used as the link target. +Aspire.Hosting/Aspire.Hosting.Ats.CreateBuilderOptions # Options for creating a distributed application builder from polyglot apphosts. + AllowUnsecuredTransport: boolean # Allows the use of HTTP urls for the AppHost resource endpoint. + AppHostFilePath: string # The full path to the AppHost file (e.g., apphost.ts, apphost.py). Used for consistent socket path computation across CLI and AppHost. + Args: string[] # The command line arguments. + ContainerRegistryOverride: string # When containers are used, use this value to override the container registry. + DashboardApplicationName: string # The application name to display in the dashboard. + DisableDashboard: boolean # Determines whether the dashboard is disabled. + EnableResourceLogging: boolean # Enables resource logging. + ProjectDirectory: string # The directory containing the AppHost project file. +Aspire.Hosting/Aspire.Hosting.Ats.ResourceEventDto # DTO for resource events returned from notification service. + ExitCode: number # The exit code if the resource has exited. + HealthStatus: string # The health status of the resource. + ResourceId: string # The unique resource ID. + ResourceName: string # The resource name. + State: string # The current state text. + StateStyle: string # The state style (e.g., "success", "warn", "error"). + +# Enum Types +enum:Aspire.Hosting.ApplicationModel.CertificateTrustScope = None | Append | Override | System +enum:Aspire.Hosting.ApplicationModel.ContainerLifetime = Session | Persistent +enum:Aspire.Hosting.ApplicationModel.EndpointProperty = Url | Host | IPV4Host | Port | Scheme | TargetPort | HostAndPort | TlsEnabled +enum:Aspire.Hosting.ApplicationModel.IconVariant = Regular | Filled +enum:Aspire.Hosting.ApplicationModel.ImagePullPolicy = Default | Always | Missing | Never +enum:Aspire.Hosting.ApplicationModel.ProbeType = Startup | Readiness | Liveness +enum:Aspire.Hosting.ApplicationModel.UrlDisplayLocation = SummaryAndDetails | DetailsOnly +enum:Aspire.Hosting.ApplicationModel.WaitBehavior = WaitOnResourceUnavailable | StopOnResourceUnavailable +enum:Aspire.Hosting.DistributedApplicationOperation = Run | Publish +enum:Aspire.Hosting.OtlpProtocol = Grpc | HttpProtobuf | HttpJson +enum:System.Net.Sockets.ProtocolType = IP | IPv6HopByHopOptions | Unspecified | Icmp | Igmp | Ggp | IPv4 | Tcp | Pup | Udp | Idp | IPv6 | IPv6RoutingHeader | IPv6FragmentHeader | IPSecEncapsulatingSecurityPayload | IPSecAuthenticationHeader | IcmpV6 | IPv6NoNextHeader | IPv6DestinationOptions | ND | Raw | Ipx | Spx | SpxII | Unknown # Capabilities +Aspire.Hosting.ApplicationModel/AfterResourcesCreatedEvent.model(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.AfterResourcesCreatedEvent) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DistributedApplicationModel +Aspire.Hosting.ApplicationModel/AfterResourcesCreatedEvent.services(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.AfterResourcesCreatedEvent) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/appendFormatted(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpressionBuilder, value: string, format?: string) -> void +Aspire.Hosting.ApplicationModel/appendLiteral(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpressionBuilder, value: string) -> void +Aspire.Hosting.ApplicationModel/appendValueProvider(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpressionBuilder, valueProvider: any, format?: string) -> void +Aspire.Hosting.ApplicationModel/BeforeResourceStartedEvent.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.BeforeResourceStartedEvent) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.ApplicationModel/BeforeResourceStartedEvent.services(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.BeforeResourceStartedEvent) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/BeforeStartEvent.model(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.BeforeStartEvent) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DistributedApplicationModel +Aspire.Hosting.ApplicationModel/BeforeStartEvent.services(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.BeforeStartEvent) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/build(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpressionBuilder) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression +Aspire.Hosting.ApplicationModel/CommandLineArgsCallbackContext.args(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext) -> Aspire.Hosting/List +Aspire.Hosting.ApplicationModel/CommandLineArgsCallbackContext.cancellationToken(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext) -> cancellationToken +Aspire.Hosting.ApplicationModel/CommandLineArgsCallbackContext.executionContext(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext) -> Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext +Aspire.Hosting.ApplicationModel/CommandLineArgsCallbackContext.logger(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext) -> Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger +Aspire.Hosting.ApplicationModel/CommandLineArgsCallbackContext.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.ApplicationModel/CommandLineArgsCallbackContext.setExecutionContext(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext, value: Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext +Aspire.Hosting.ApplicationModel/CommandLineArgsCallbackContext.setLogger(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext, value: Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandLineArgsCallbackContext +Aspire.Hosting.ApplicationModel/ConnectionStringAvailableEvent.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ConnectionStringAvailableEvent) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.ApplicationModel/ConnectionStringAvailableEvent.services(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ConnectionStringAvailableEvent) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/EndpointReference.endpointName(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> string +Aspire.Hosting.ApplicationModel/EndpointReference.errorMessage(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> string +Aspire.Hosting.ApplicationModel/EndpointReference.excludeReferenceEndpoint(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> boolean +Aspire.Hosting.ApplicationModel/EndpointReference.exists(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> boolean +Aspire.Hosting.ApplicationModel/EndpointReference.getTlsValue(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference, enabledValue: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression, disabledValue: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression +Aspire.Hosting.ApplicationModel/EndpointReference.host(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> string +Aspire.Hosting.ApplicationModel/EndpointReference.isAllocated(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> boolean +Aspire.Hosting.ApplicationModel/EndpointReference.isHttp(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> boolean +Aspire.Hosting.ApplicationModel/EndpointReference.isHttps(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> boolean +Aspire.Hosting.ApplicationModel/EndpointReference.port(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> number +Aspire.Hosting.ApplicationModel/EndpointReference.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting.ApplicationModel/EndpointReference.scheme(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> string +Aspire.Hosting.ApplicationModel/EndpointReference.setErrorMessage(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference, value: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference +Aspire.Hosting.ApplicationModel/EndpointReference.targetPort(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> number +Aspire.Hosting.ApplicationModel/EndpointReference.tlsEnabled(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> boolean +Aspire.Hosting.ApplicationModel/EndpointReference.url(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> string +Aspire.Hosting.ApplicationModel/EndpointReferenceExpression.endpoint(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReferenceExpression) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference +Aspire.Hosting.ApplicationModel/EndpointReferenceExpression.property(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReferenceExpression) -> enum:Aspire.Hosting.ApplicationModel.EndpointProperty +Aspire.Hosting.ApplicationModel/EndpointReferenceExpression.valueExpression(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReferenceExpression) -> string +Aspire.Hosting.ApplicationModel/EnvironmentCallbackContext.cancellationToken(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EnvironmentCallbackContext) -> cancellationToken +Aspire.Hosting.ApplicationModel/EnvironmentCallbackContext.environmentVariables(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EnvironmentCallbackContext) -> Aspire.Hosting/Dict +Aspire.Hosting.ApplicationModel/EnvironmentCallbackContext.executionContext(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EnvironmentCallbackContext) -> Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext +Aspire.Hosting.ApplicationModel/EnvironmentCallbackContext.logger(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EnvironmentCallbackContext) -> Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger +Aspire.Hosting.ApplicationModel/EnvironmentCallbackContext.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EnvironmentCallbackContext) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.ApplicationModel/EnvironmentCallbackContext.setLogger(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EnvironmentCallbackContext, value: Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.EnvironmentCallbackContext +Aspire.Hosting.ApplicationModel/ExecuteCommandContext.cancellationToken(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext) -> cancellationToken +Aspire.Hosting.ApplicationModel/ExecuteCommandContext.resourceName(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext) -> string +Aspire.Hosting.ApplicationModel/ExecuteCommandContext.serviceProvider(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/ExecuteCommandContext.setCancellationToken(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext, value: cancellationToken) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext +Aspire.Hosting.ApplicationModel/ExecuteCommandContext.setResourceName(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext, value: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext +Aspire.Hosting.ApplicationModel/ExecuteCommandContext.setServiceProvider(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext, value: System.ComponentModel/System.IServiceProvider) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecuteCommandContext +Aspire.Hosting.ApplicationModel/getValue(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression, cancellationToken: cancellationToken) -> string +Aspire.Hosting.ApplicationModel/getValueAsync(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference, cancellationToken?: cancellationToken) -> string +Aspire.Hosting.ApplicationModel/InitializeResourceEvent.eventing(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.InitializeResourceEvent) -> Aspire.Hosting/Aspire.Hosting.Eventing.IDistributedApplicationEventing +Aspire.Hosting.ApplicationModel/InitializeResourceEvent.logger(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.InitializeResourceEvent) -> Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger +Aspire.Hosting.ApplicationModel/InitializeResourceEvent.notifications(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.InitializeResourceEvent) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceNotificationService +Aspire.Hosting.ApplicationModel/InitializeResourceEvent.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.InitializeResourceEvent) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.ApplicationModel/InitializeResourceEvent.services(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.InitializeResourceEvent) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/ReferenceExpressionBuilder.isEmpty(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpressionBuilder) -> boolean +Aspire.Hosting.ApplicationModel/ResourceEndpointsAllocatedEvent.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceEndpointsAllocatedEvent) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.ApplicationModel/ResourceEndpointsAllocatedEvent.services(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceEndpointsAllocatedEvent) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/ResourceReadyEvent.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceReadyEvent) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.ApplicationModel/ResourceReadyEvent.services(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceReadyEvent) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/ResourceStoppedEvent.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceStoppedEvent) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.ApplicationModel/ResourceStoppedEvent.services(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceStoppedEvent) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/ResourceUrlsCallbackContext.cancellationToken(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceUrlsCallbackContext) -> cancellationToken +Aspire.Hosting.ApplicationModel/ResourceUrlsCallbackContext.executionContext(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceUrlsCallbackContext) -> Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext +Aspire.Hosting.ApplicationModel/ResourceUrlsCallbackContext.logger(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceUrlsCallbackContext) -> Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger +Aspire.Hosting.ApplicationModel/ResourceUrlsCallbackContext.resource(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceUrlsCallbackContext) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.ApplicationModel/ResourceUrlsCallbackContext.setLogger(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceUrlsCallbackContext, value: Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceUrlsCallbackContext +Aspire.Hosting.ApplicationModel/ResourceUrlsCallbackContext.urls(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceUrlsCallbackContext) -> Aspire.Hosting/List Aspire.Hosting.ApplicationModel/SqlServerDatabaseResource.connectionStringExpression(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerDatabaseResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression Aspire.Hosting.ApplicationModel/SqlServerDatabaseResource.databaseName(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerDatabaseResource) -> string Aspire.Hosting.ApplicationModel/SqlServerDatabaseResource.jdbcConnectionString(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerDatabaseResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression +Aspire.Hosting.ApplicationModel/SqlServerDatabaseResource.name(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerDatabaseResource) -> string Aspire.Hosting.ApplicationModel/SqlServerDatabaseResource.parent(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerDatabaseResource) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource Aspire.Hosting.ApplicationModel/SqlServerDatabaseResource.uriExpression(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerDatabaseResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression Aspire.Hosting.ApplicationModel/SqlServerServerResource.connectionStringExpression(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression Aspire.Hosting.ApplicationModel/SqlServerServerResource.databases(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> Aspire.Hosting/Dict +Aspire.Hosting.ApplicationModel/SqlServerServerResource.entrypoint(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> string Aspire.Hosting.ApplicationModel/SqlServerServerResource.host(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReferenceExpression Aspire.Hosting.ApplicationModel/SqlServerServerResource.jdbcConnectionString(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression +Aspire.Hosting.ApplicationModel/SqlServerServerResource.name(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> string Aspire.Hosting.ApplicationModel/SqlServerServerResource.passwordParameter(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource Aspire.Hosting.ApplicationModel/SqlServerServerResource.port(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReferenceExpression Aspire.Hosting.ApplicationModel/SqlServerServerResource.primaryEndpoint(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference +Aspire.Hosting.ApplicationModel/SqlServerServerResource.setEntrypoint(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource, value: string) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource Aspire.Hosting.ApplicationModel/SqlServerServerResource.setPasswordParameter(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource, value: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource +Aspire.Hosting.ApplicationModel/SqlServerServerResource.setShellExecution(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource, value: boolean) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource +Aspire.Hosting.ApplicationModel/SqlServerServerResource.shellExecution(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> boolean Aspire.Hosting.ApplicationModel/SqlServerServerResource.uriExpression(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression Aspire.Hosting.ApplicationModel/SqlServerServerResource.userNameReference(context: Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression +Aspire.Hosting.ApplicationModel/UpdateCommandStateContext.serviceProvider(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.UpdateCommandStateContext) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.ApplicationModel/UpdateCommandStateContext.setServiceProvider(context: Aspire.Hosting/Aspire.Hosting.ApplicationModel.UpdateCommandStateContext, value: System.ComponentModel/System.IServiceProvider) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.UpdateCommandStateContext +Aspire.Hosting.Eventing/IDistributedApplicationEventing.unsubscribe(context: Aspire.Hosting/Aspire.Hosting.Eventing.IDistributedApplicationEventing, subscription: Aspire.Hosting/Aspire.Hosting.Eventing.DistributedApplicationEventSubscription) -> void +Aspire.Hosting.Pipelines/dependsOn(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep, stepName: string) -> void +Aspire.Hosting.Pipelines/getStepsByTag(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext, tag: string) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep[] +Aspire.Hosting.Pipelines/PipelineConfigurationContext.model(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DistributedApplicationModel +Aspire.Hosting.Pipelines/PipelineConfigurationContext.services(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.Pipelines/PipelineConfigurationContext.setModel(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext, value: Aspire.Hosting/Aspire.Hosting.ApplicationModel.DistributedApplicationModel) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext +Aspire.Hosting.Pipelines/PipelineConfigurationContext.setServices(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext, value: System.ComponentModel/System.IServiceProvider) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext +Aspire.Hosting.Pipelines/PipelineConfigurationContext.setSteps(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext, value: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep[]) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext +Aspire.Hosting.Pipelines/PipelineConfigurationContext.steps(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineConfigurationContext) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep[] +Aspire.Hosting.Pipelines/PipelineContext.cancellationToken(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext) -> cancellationToken +Aspire.Hosting.Pipelines/PipelineContext.executionContext(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext) -> Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext +Aspire.Hosting.Pipelines/PipelineContext.logger(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext) -> Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger +Aspire.Hosting.Pipelines/PipelineContext.model(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DistributedApplicationModel +Aspire.Hosting.Pipelines/PipelineContext.services(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.Pipelines/PipelineContext.setCancellationToken(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext, value: cancellationToken) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext +Aspire.Hosting.Pipelines/PipelineContext.summary(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineSummary +Aspire.Hosting.Pipelines/PipelineStep.dependsOnSteps(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep) -> Aspire.Hosting/List +Aspire.Hosting.Pipelines/PipelineStep.description(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep) -> string +Aspire.Hosting.Pipelines/PipelineStep.name(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep) -> string +Aspire.Hosting.Pipelines/PipelineStep.requiredBySteps(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep) -> Aspire.Hosting/List +Aspire.Hosting.Pipelines/PipelineStep.resource(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.Pipelines/PipelineStep.setDependsOnSteps(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep, value: Aspire.Hosting/List) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep +Aspire.Hosting.Pipelines/PipelineStep.setDescription(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep, value: string) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep +Aspire.Hosting.Pipelines/PipelineStep.setName(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep, value: string) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep +Aspire.Hosting.Pipelines/PipelineStep.setRequiredBySteps(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep, value: Aspire.Hosting/List) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep +Aspire.Hosting.Pipelines/PipelineStep.setResource(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep, value: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep +Aspire.Hosting.Pipelines/PipelineStep.setTags(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep, value: Aspire.Hosting/List) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep +Aspire.Hosting.Pipelines/PipelineStep.tags(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep) -> Aspire.Hosting/List +Aspire.Hosting.Pipelines/PipelineStepContext.cancellationToken(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext) -> cancellationToken +Aspire.Hosting.Pipelines/PipelineStepContext.executionContext(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext) -> Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext +Aspire.Hosting.Pipelines/PipelineStepContext.logger(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext) -> Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger +Aspire.Hosting.Pipelines/PipelineStepContext.model(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DistributedApplicationModel +Aspire.Hosting.Pipelines/PipelineStepContext.pipelineContext(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext +Aspire.Hosting.Pipelines/PipelineStepContext.reportingStep(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext) -> Aspire.Hosting/Aspire.Hosting.Pipelines.IReportingStep +Aspire.Hosting.Pipelines/PipelineStepContext.services(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting.Pipelines/PipelineStepContext.setPipelineContext(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext, value: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext +Aspire.Hosting.Pipelines/PipelineStepContext.setReportingStep(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext, value: Aspire.Hosting/Aspire.Hosting.Pipelines.IReportingStep) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext +Aspire.Hosting.Pipelines/PipelineStepContext.summary(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepContext) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineSummary +Aspire.Hosting.Pipelines/PipelineStepFactoryContext.pipelineContext(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepFactoryContext) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext +Aspire.Hosting.Pipelines/PipelineStepFactoryContext.resource(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepFactoryContext) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting.Pipelines/PipelineStepFactoryContext.setPipelineContext(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepFactoryContext, value: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineContext) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepFactoryContext +Aspire.Hosting.Pipelines/PipelineStepFactoryContext.setResource(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepFactoryContext, value: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource) -> Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStepFactoryContext +Aspire.Hosting.Pipelines/PipelineSummary.add(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineSummary, key: string, value: string) -> void +Aspire.Hosting.Pipelines/requiredBy(context: Aspire.Hosting/Aspire.Hosting.Pipelines.PipelineStep, stepName: string) -> void Aspire.Hosting.SqlServer/addDatabase(name: string, databaseName?: string) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerDatabaseResource Aspire.Hosting.SqlServer/addSqlServer(name: string, password?: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource, port?: number) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource Aspire.Hosting.SqlServer/withCreationScript(script: string) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerDatabaseResource @@ -28,3 +262,204 @@ Aspire.Hosting.SqlServer/withDataBindMount(source: string, isReadOnly?: boolean) Aspire.Hosting.SqlServer/withDataVolume(name?: string, isReadOnly?: boolean) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource Aspire.Hosting.SqlServer/withHostPort(port: number) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource Aspire.Hosting.SqlServer/withPassword(password: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource) -> Aspire.Hosting.SqlServer/Aspire.Hosting.ApplicationModel.SqlServerServerResource +Aspire.Hosting/addConnectionString(name: string, environmentVariableName?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithConnectionString +Aspire.Hosting/addConnectionStringBuilder(name: string, connectionStringBuilder: callback) -> Aspire.Hosting/Aspire.Hosting.ConnectionStringResource +Aspire.Hosting/addConnectionStringExpression(name: string, connectionStringExpression: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression) -> Aspire.Hosting/Aspire.Hosting.ConnectionStringResource +Aspire.Hosting/addContainer(name: string, image: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/addContainerRegistry(name: string, endpoint: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource, repository?: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerRegistryResource +Aspire.Hosting/addContainerRegistryFromString(name: string, endpoint: string, repository?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerRegistryResource +Aspire.Hosting/addCSharpApp(name: string, path: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ProjectResource +Aspire.Hosting/addCSharpAppWithOptions(name: string, path: string, configure: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.CSharpAppResource +Aspire.Hosting/addDockerfile(name: string, contextPath: string, dockerfilePath?: string, stage?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/addDotnetTool(name: string, packageId: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DotnetToolResource +Aspire.Hosting/addExecutable(name: string, command: string, workingDirectory: string, args: string[]) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecutableResource +Aspire.Hosting/addExternalService(name: string, url: string) -> Aspire.Hosting/Aspire.Hosting.ExternalServiceResource +Aspire.Hosting/addExternalServiceParameter(name: string, urlParameter: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource) -> Aspire.Hosting/Aspire.Hosting.ExternalServiceResource +Aspire.Hosting/addExternalServiceUri(name: string, uri: uri) -> Aspire.Hosting/Aspire.Hosting.ExternalServiceResource +Aspire.Hosting/addMarkdown(key: string, markdownString: string) -> void +Aspire.Hosting/addParameter(name: string, secret?: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource +Aspire.Hosting/addParameterFromConfiguration(name: string, configurationKey: string, secret?: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource +Aspire.Hosting/addParameterWithValue(name: string, value: string, publishValueAsDefault?: boolean, secret?: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource +Aspire.Hosting/addProject(name: string, projectPath: string, launchProfileName: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ProjectResource +Aspire.Hosting/addProjectWithOptions(name: string, projectPath: string, configure: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ProjectResource +Aspire.Hosting/asHttp2Service() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/build(context: Aspire.Hosting/Aspire.Hosting.IDistributedApplicationBuilder) -> Aspire.Hosting/Aspire.Hosting.DistributedApplication +Aspire.Hosting/clearContainerFilesSources() -> Aspire.Hosting/Aspire.Hosting.IResourceWithContainerFiles +Aspire.Hosting/completeLog(resource: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource) -> void +Aspire.Hosting/completeLogByName(resourceName: string) -> void +Aspire.Hosting/completeStep(completionText: string, completionState?: string, cancellationToken?: cancellationToken) -> void +Aspire.Hosting/completeStepMarkdown(markdownString: string, completionState?: string, cancellationToken?: cancellationToken) -> void +Aspire.Hosting/completeTask(completionMessage?: string, completionState?: string, cancellationToken?: cancellationToken) -> void +Aspire.Hosting/completeTaskMarkdown(markdownString: string, completionState?: string, cancellationToken?: cancellationToken) -> void +Aspire.Hosting/createBuilder() -> Aspire.Hosting/Aspire.Hosting.IDistributedApplicationBuilder +Aspire.Hosting/createBuilderWithOptions() -> Aspire.Hosting/Aspire.Hosting.IDistributedApplicationBuilder +Aspire.Hosting/createLogger(categoryName: string) -> Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILogger +Aspire.Hosting/createMarkdownTask(markdownString: string, cancellationToken?: cancellationToken) -> Aspire.Hosting/Aspire.Hosting.Pipelines.IReportingTask +Aspire.Hosting/createTask(statusText: string, cancellationToken?: cancellationToken) -> Aspire.Hosting/Aspire.Hosting.Pipelines.IReportingTask +Aspire.Hosting/Dict.clear() -> void +Aspire.Hosting/Dict.count() -> number +Aspire.Hosting/Dict.get(key: string) -> any +Aspire.Hosting/Dict.has(key: string) -> boolean +Aspire.Hosting/Dict.keys() -> string[] +Aspire.Hosting/Dict.remove(key: string) -> boolean +Aspire.Hosting/Dict.set(key: string, value: any) -> void +Aspire.Hosting/Dict.toObject() -> Aspire.Hosting/Dict +Aspire.Hosting/Dict.values() -> any[] +Aspire.Hosting/disableForwardedHeaders() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ProjectResource +Aspire.Hosting/DistributedApplicationExecutionContext.isPublishMode(context: Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext) -> boolean +Aspire.Hosting/DistributedApplicationExecutionContext.isRunMode(context: Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext) -> boolean +Aspire.Hosting/DistributedApplicationExecutionContext.operation(context: Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext) -> enum:Aspire.Hosting.DistributedApplicationOperation +Aspire.Hosting/DistributedApplicationExecutionContext.publisherName(context: Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext) -> string +Aspire.Hosting/DistributedApplicationExecutionContext.serviceProvider(context: Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext) -> System.ComponentModel/System.IServiceProvider +Aspire.Hosting/DistributedApplicationExecutionContext.setPublisherName(context: Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext, value: string) -> Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext +Aspire.Hosting/excludeFromManifest() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/excludeFromMcp() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/exists(key: string) -> boolean +Aspire.Hosting/findResourceByName(name: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/getChildren() -> Microsoft.Extensions.Configuration.Abstractions/Microsoft.Extensions.Configuration.IConfigurationSection[] +Aspire.Hosting/getConfiguration() -> Microsoft.Extensions.Configuration.Abstractions/Microsoft.Extensions.Configuration.IConfiguration +Aspire.Hosting/getConfigValue(key: string) -> string +Aspire.Hosting/getConnectionString(name: string) -> string +Aspire.Hosting/getDistributedApplicationModel() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DistributedApplicationModel +Aspire.Hosting/getEndpoint(name: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference +Aspire.Hosting/getEventing() -> Aspire.Hosting/Aspire.Hosting.Eventing.IDistributedApplicationEventing +Aspire.Hosting/getLoggerFactory() -> Microsoft.Extensions.Logging.Abstractions/Microsoft.Extensions.Logging.ILoggerFactory +Aspire.Hosting/getOrSetSecret(resourceBuilder: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource, name: string, value: string) -> void +Aspire.Hosting/getResourceLoggerService() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceLoggerService +Aspire.Hosting/getResourceName() -> string +Aspire.Hosting/getResourceNotificationService() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ResourceNotificationService +Aspire.Hosting/getResources() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource[] +Aspire.Hosting/getSection(key: string) -> Microsoft.Extensions.Configuration.Abstractions/Microsoft.Extensions.Configuration.IConfigurationSection +Aspire.Hosting/getUserSecretsManager() -> Aspire.Hosting/Aspire.Hosting.IUserSecretsManager +Aspire.Hosting/IDistributedApplicationBuilder.appHostDirectory(context: Aspire.Hosting/Aspire.Hosting.IDistributedApplicationBuilder) -> string +Aspire.Hosting/IDistributedApplicationBuilder.environment(context: Aspire.Hosting/Aspire.Hosting.IDistributedApplicationBuilder) -> Microsoft.Extensions.Hosting.Abstractions/Microsoft.Extensions.Hosting.IHostEnvironment +Aspire.Hosting/IDistributedApplicationBuilder.eventing(context: Aspire.Hosting/Aspire.Hosting.IDistributedApplicationBuilder) -> Aspire.Hosting/Aspire.Hosting.Eventing.IDistributedApplicationEventing +Aspire.Hosting/IDistributedApplicationBuilder.executionContext(context: Aspire.Hosting/Aspire.Hosting.IDistributedApplicationBuilder) -> Aspire.Hosting/Aspire.Hosting.DistributedApplicationExecutionContext +Aspire.Hosting/IDistributedApplicationBuilder.userSecretsManager(context: Aspire.Hosting/Aspire.Hosting.IDistributedApplicationBuilder) -> Aspire.Hosting/Aspire.Hosting.IUserSecretsManager +Aspire.Hosting/isDevelopment() -> boolean +Aspire.Hosting/isEnvironment(environmentName: string) -> boolean +Aspire.Hosting/isProduction() -> boolean +Aspire.Hosting/isStaging() -> boolean +Aspire.Hosting/IUserSecretsManager.filePath(context: Aspire.Hosting/Aspire.Hosting.IUserSecretsManager) -> string +Aspire.Hosting/IUserSecretsManager.isAvailable(context: Aspire.Hosting/Aspire.Hosting.IUserSecretsManager) -> boolean +Aspire.Hosting/IUserSecretsManager.trySetSecret(context: Aspire.Hosting/Aspire.Hosting.IUserSecretsManager, name: string, value: string) -> boolean +Aspire.Hosting/List.add(item: any) -> void +Aspire.Hosting/List.clear() -> void +Aspire.Hosting/List.get(index: number) -> any +Aspire.Hosting/List.indexOf(item: any) -> number +Aspire.Hosting/List.insert(index: number, item: any) -> void +Aspire.Hosting/List.length() -> number +Aspire.Hosting/List.removeAt(index: number) -> boolean +Aspire.Hosting/List.set(index: number, value: any) -> void +Aspire.Hosting/List.toArray() -> any[] +Aspire.Hosting/log(level: string, message: string) -> void +Aspire.Hosting/logDebug(message: string) -> void +Aspire.Hosting/logError(message: string) -> void +Aspire.Hosting/logInformation(message: string) -> void +Aspire.Hosting/logStep(level: string, message: string) -> void +Aspire.Hosting/logStepMarkdown(level: string, markdownString: string) -> void +Aspire.Hosting/logWarning(message: string) -> void +Aspire.Hosting/onBeforeResourceStarted(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/onConnectionStringAvailable(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithConnectionString +Aspire.Hosting/onInitializeResource(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/onResourceEndpointsAllocated(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/onResourceReady(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/onResourceStopped(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/ProjectResourceOptions.excludeKestrelEndpoints(context: Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions) -> boolean +Aspire.Hosting/ProjectResourceOptions.excludeLaunchProfile(context: Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions) -> boolean +Aspire.Hosting/ProjectResourceOptions.launchProfileName(context: Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions) -> string +Aspire.Hosting/ProjectResourceOptions.setExcludeKestrelEndpoints(context: Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions, value: boolean) -> Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions +Aspire.Hosting/ProjectResourceOptions.setExcludeLaunchProfile(context: Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions, value: boolean) -> Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions +Aspire.Hosting/ProjectResourceOptions.setLaunchProfileName(context: Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions, value: string) -> Aspire.Hosting/Aspire.Hosting.ProjectResourceOptions +Aspire.Hosting/publishAsConnectionString() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/publishAsContainer() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/publishAsDockerFile() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecutableResource +Aspire.Hosting/publishAsDockerFileWithConfigure(configure: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecutableResource +Aspire.Hosting/publishProjectAsDockerFileWithConfigure(configure?: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ProjectResource +Aspire.Hosting/publishResourceUpdate(resource: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource, state?: string, stateStyle?: string) -> void +Aspire.Hosting/publishWithContainerFiles(source: Aspire.Hosting/Aspire.Hosting.IResourceWithContainerFiles, destinationPath: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IContainerFilesDestinationResource +Aspire.Hosting/run(context: Aspire.Hosting/Aspire.Hosting.DistributedApplication, cancellationToken?: cancellationToken) -> void +Aspire.Hosting/saveStateJson(json: string, cancellationToken?: cancellationToken) -> void +Aspire.Hosting/subscribeAfterResourcesCreated(callback: callback) -> Aspire.Hosting/Aspire.Hosting.Eventing.DistributedApplicationEventSubscription +Aspire.Hosting/subscribeBeforeStart(callback: callback) -> Aspire.Hosting/Aspire.Hosting.Eventing.DistributedApplicationEventSubscription +Aspire.Hosting/tryGetResourceState(resourceName: string) -> Aspire.Hosting/Aspire.Hosting.Ats.ResourceEventDto +Aspire.Hosting/updateTask(statusText: string, cancellationToken?: cancellationToken) -> void +Aspire.Hosting/updateTaskMarkdown(markdownString: string, cancellationToken?: cancellationToken) -> void +Aspire.Hosting/waitFor(dependency: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithWaitSupport +Aspire.Hosting/waitForCompletion(dependency: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource, exitCode?: number) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithWaitSupport +Aspire.Hosting/waitForDependencies(resource: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource) -> void +Aspire.Hosting/waitForResourceHealthy(resourceName: string) -> Aspire.Hosting/Aspire.Hosting.Ats.ResourceEventDto +Aspire.Hosting/waitForResourceState(resourceName: string, targetState?: string) -> void +Aspire.Hosting/waitForResourceStates(resourceName: string, targetStates: string[]) -> string +Aspire.Hosting/waitForStart(dependency: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithWaitSupport +Aspire.Hosting/waitForStartWithBehavior(dependency: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource, waitBehavior: enum:Aspire.Hosting.ApplicationModel.WaitBehavior) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithWaitSupport +Aspire.Hosting/waitForWithBehavior(dependency: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource, waitBehavior: enum:Aspire.Hosting.ApplicationModel.WaitBehavior) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithWaitSupport +Aspire.Hosting/withArgs(args: string[]) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithArgs +Aspire.Hosting/withArgsCallback(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithArgs +Aspire.Hosting/withBindMount(source: string, target: string, isReadOnly?: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withBuildArg(name: string, value: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withBuildSecret(name: string, value: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withCertificateTrustScope(scope: enum:Aspire.Hosting.ApplicationModel.CertificateTrustScope) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withChildRelationship(child: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withCommand(name: string, displayName: string, executeCommand: callback, commandOptions?: Aspire.Hosting/Aspire.Hosting.ApplicationModel.CommandOptions) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withConnectionProperty(name: string, value: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithConnectionString +Aspire.Hosting/withConnectionPropertyValue(name: string, value: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithConnectionString +Aspire.Hosting/withContainerFilesSource(sourcePath: string) -> Aspire.Hosting/Aspire.Hosting.IResourceWithContainerFiles +Aspire.Hosting/withContainerName(name: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withContainerNetworkAlias(alias: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withContainerRegistry(registry: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withContainerRuntimeArgs(args: string[]) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withDescription(description: string, enableMarkdown?: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource +Aspire.Hosting/withDeveloperCertificateTrust(trust: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withDockerfile(contextPath: string, dockerfilePath?: string, stage?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withDockerfileBaseImage(buildImage?: string, runtimeImage?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withEndpoint(port?: number, targetPort?: number, scheme?: string, name?: string, env?: string, isProxied?: boolean, isExternal?: boolean, protocol?: enum:System.Net.Sockets.ProtocolType) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/withEndpointProxySupport(proxyEnabled: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withEntrypoint(entrypoint: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withEnvironment(name: string, value: string|Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression|Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference|Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource|Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithConnectionString|Aspire.Hosting/Aspire.Hosting.ApplicationModel.IExpressionValue) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withEnvironmentCallback(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withExecutableCommand(command: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecutableResource +Aspire.Hosting/withExplicitStart() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withExternalHttpEndpoints() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/withExternalServiceHttpHealthCheck(path?: string, statusCode?: number) -> Aspire.Hosting/Aspire.Hosting.ExternalServiceResource +Aspire.Hosting/withHealthCheck(key: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withHttpEndpoint(port?: number, targetPort?: number, name?: string, env?: string, isProxied?: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/withHttpHealthCheck(path?: string, statusCode?: number, endpointName?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/withHttpProbe(probeType: enum:Aspire.Hosting.ApplicationModel.ProbeType, path?: string, initialDelaySeconds?: number, periodSeconds?: number, timeoutSeconds?: number, failureThreshold?: number, successThreshold?: number, endpointName?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/withHttpsDeveloperCertificate(password?: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ParameterResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withHttpsEndpoint(port?: number, targetPort?: number, name?: string, env?: string, isProxied?: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/withIconName(iconName: string, iconVariant?: enum:Aspire.Hosting.ApplicationModel.IconVariant) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withImage(image: string, tag?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withImagePullPolicy(pullPolicy: enum:Aspire.Hosting.ApplicationModel.ImagePullPolicy) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withImageRegistry(registry: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withImageSHA256(sha256: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withImageTag(tag: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withLifetime(lifetime: enum:Aspire.Hosting.ApplicationModel.ContainerLifetime) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withMcpServer(path?: string, endpointName?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/withOtlpExporter() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withOtlpExporterProtocol(protocol: enum:Aspire.Hosting.OtlpProtocol) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withoutHttpsCertificate() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withParentRelationship(parent: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withPipelineConfiguration(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withPipelineStepFactory(stepName: string, callback: callback, dependsOn?: string[], requiredBy?: string[], tags?: string[], description?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withReference(source: Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource, connectionName?: string, optional?: boolean, name?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withReferenceEndpoint(endpointReference: Aspire.Hosting/Aspire.Hosting.ApplicationModel.EndpointReference) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withReferenceExternalService(externalService: Aspire.Hosting/Aspire.Hosting.ExternalServiceResource) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withReferenceUri(name: string, uri: uri) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEnvironment +Aspire.Hosting/withRemoteImageName(remoteImageName: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IComputeResource +Aspire.Hosting/withRemoteImageTag(remoteImageTag: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IComputeResource +Aspire.Hosting/withReplicas(replicas: number) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ProjectResource +Aspire.Hosting/withRequiredCommand(command: string, helpLink?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withToolIgnoreExistingFeeds() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DotnetToolResource +Aspire.Hosting/withToolIgnoreFailedSources() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DotnetToolResource +Aspire.Hosting/withToolPackage(packageId: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DotnetToolResource +Aspire.Hosting/withToolPrerelease() -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DotnetToolResource +Aspire.Hosting/withToolSource(source: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DotnetToolResource +Aspire.Hosting/withToolVersion(version: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.DotnetToolResource +Aspire.Hosting/withUrl(url: string, displayText?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withUrlExpression(url: Aspire.Hosting/Aspire.Hosting.ApplicationModel.ReferenceExpression, displayText?: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withUrlForEndpoint(endpointName: string, callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withUrlForEndpointFactory(endpointName: string, callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResourceWithEndpoints +Aspire.Hosting/withUrlsCallback(callback: callback) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.IResource +Aspire.Hosting/withVolume(target: string, name?: string, isReadOnly?: boolean) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ContainerResource +Aspire.Hosting/withWorkingDirectory(workingDirectory: string) -> Aspire.Hosting/Aspire.Hosting.ApplicationModel.ExecutableResource diff --git a/src/Aspire.Hosting.SqlServer/api/Aspire.Hosting.SqlServer.cs b/src/Aspire.Hosting.SqlServer/api/Aspire.Hosting.SqlServer.cs index 7d91582b195..6c40c49ce50 100644 --- a/src/Aspire.Hosting.SqlServer/api/Aspire.Hosting.SqlServer.cs +++ b/src/Aspire.Hosting.SqlServer/api/Aspire.Hosting.SqlServer.cs @@ -10,25 +10,25 @@ namespace Aspire.Hosting { public static partial class SqlServerBuilderExtensions { - [AspireExport("addDatabase", Description = "Adds a SQL Server database resource")] + [AspireExport(Description = "Adds a SQL Server database resource")] public static ApplicationModel.IResourceBuilder AddDatabase(this ApplicationModel.IResourceBuilder builder, string name, string? databaseName = null) { throw null; } - [AspireExport("addSqlServer", Description = "Adds a SQL Server container resource")] + [AspireExport(Description = "Adds a SQL Server container resource")] public static ApplicationModel.IResourceBuilder AddSqlServer(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? password = null, int? port = null) { throw null; } - [AspireExport("withCreationScript", Description = "Defines the SQL script used to create the database")] + [AspireExport(Description = "Defines the SQL script used to create the database")] public static ApplicationModel.IResourceBuilder WithCreationScript(this ApplicationModel.IResourceBuilder builder, string script) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a bind mount for the SQL Server data folder")] + [AspireExport(Description = "Adds a bind mount for the SQL Server data folder")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a named volume for the SQL Server data folder")] + [AspireExport(Description = "Adds a named volume for the SQL Server data folder")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } - [AspireExport("withHostPort", Description = "Sets the host port for the SQL Server resource")] + [AspireExport(Description = "Sets the host port for the SQL Server resource")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } - [AspireExport("withPassword", Description = "Configures the password for the SQL Server resource")] + [AspireExport(Description = "Configures the password for the SQL Server resource")] public static ApplicationModel.IResourceBuilder WithPassword(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder password) { throw null; } } } @@ -37,7 +37,7 @@ namespace Aspire.Hosting.ApplicationModel { [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, Name = {Name}, Database = {DatabaseName}")] [AspireExport(ExposeProperties = true)] - public partial class SqlServerDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class SqlServerDatabaseResource : Resource, IResourceWithParent, IResourceWithParent, IResource, IResourceWithConnectionString, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public SqlServerDatabaseResource(string name, string databaseName, SqlServerServerResource parent) : base(default!) { } @@ -55,7 +55,7 @@ public SqlServerDatabaseResource(string name, string databaseName, SqlServerServ } [AspireExport(ExposeProperties = true)] - public partial class SqlServerServerResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class SqlServerServerResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public SqlServerServerResource(string name, ParameterResource password) : base(default!, default) { } diff --git a/src/Aspire.Hosting.Testing/api/Aspire.Hosting.Testing.cs b/src/Aspire.Hosting.Testing/api/Aspire.Hosting.Testing.cs index c8e395f1ea7..946eb31a85e 100644 --- a/src/Aspire.Hosting.Testing/api/Aspire.Hosting.Testing.cs +++ b/src/Aspire.Hosting.Testing/api/Aspire.Hosting.Testing.cs @@ -43,7 +43,7 @@ public static partial class DistributedApplicationHostingTestingExtensions [AspireExportIgnore(Reason = "Use the exported getConnectionString overload without a cancellation token.")] public static System.Threading.Tasks.ValueTask GetConnectionStringAsync(this DistributedApplication app, string resourceName, System.Threading.CancellationToken cancellationToken = default) { throw null; } - [AspireExport("getEndpoint", Description = "Gets the endpoint for the specified resource.")] + [AspireExport(Description = "Gets the endpoint for the specified resource.")] public static System.Uri GetEndpoint(this DistributedApplication app, string resourceName, string? endpointName = null) { throw null; } [AspireExportIgnore(Reason = "Use the ATS-friendly overload that accepts a network identifier string.")] diff --git a/src/Aspire.Hosting.Valkey/api/Aspire.Hosting.Valkey.cs b/src/Aspire.Hosting.Valkey/api/Aspire.Hosting.Valkey.cs index 85101901e35..aa83256845c 100644 --- a/src/Aspire.Hosting.Valkey/api/Aspire.Hosting.Valkey.cs +++ b/src/Aspire.Hosting.Valkey/api/Aspire.Hosting.Valkey.cs @@ -10,19 +10,19 @@ namespace Aspire.Hosting { public static partial class ValkeyBuilderExtensions { - [AspireExport("addValkey", Description = "Adds a Valkey container resource")] + [AspireExport(Description = "Adds a Valkey container resource")] public static ApplicationModel.IResourceBuilder AddValkey(this IDistributedApplicationBuilder builder, string name, int? port = null, ApplicationModel.IResourceBuilder? password = null) { throw null; } [AspireExportIgnore(Reason = "Convenience overload. Use the overload with optional password parameter instead.")] public static ApplicationModel.IResourceBuilder AddValkey(this IDistributedApplicationBuilder builder, string name, int? port) { throw null; } - [AspireExport("withDataBindMount", Description = "Adds a data bind mount for Valkey and enables persistence")] + [AspireExport(Description = "Adds a data bind mount for Valkey and enables persistence")] public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source, bool isReadOnly = false) { throw null; } - [AspireExport("withDataVolume", Description = "Adds a data volume for Valkey and enables persistence")] + [AspireExport(Description = "Adds a data volume for Valkey and enables persistence")] public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null, bool isReadOnly = false) { throw null; } - [AspireExport("withPersistence", Description = "Configures Valkey persistence")] + [AspireExport(Description = "Configures Valkey persistence")] public static ApplicationModel.IResourceBuilder WithPersistence(this ApplicationModel.IResourceBuilder builder, System.TimeSpan? interval = null, long keysChangedThreshold = 1) { throw null; } } } @@ -30,7 +30,7 @@ public static partial class ValkeyBuilderExtensions namespace Aspire.Hosting.ApplicationModel { [AspireExport(ExposeProperties = true)] - public partial class ValkeyResource : ContainerResource, IResourceWithConnectionString, IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class ValkeyResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public ValkeyResource(string name, ParameterResource password) : base(default!, default) { } diff --git a/src/Aspire.Hosting.Yarp/api/Aspire.Hosting.Yarp.cs b/src/Aspire.Hosting.Yarp/api/Aspire.Hosting.Yarp.cs index 0dee1136e9b..62fdbbd281a 100644 --- a/src/Aspire.Hosting.Yarp/api/Aspire.Hosting.Yarp.cs +++ b/src/Aspire.Hosting.Yarp/api/Aspire.Hosting.Yarp.cs @@ -21,48 +21,49 @@ public partial interface IYarpConfigurationBuilder Yarp.YarpCluster AddCluster(string clusterName, object destination); [AspireExportIgnore(Reason = "Use the addClusterWithDestinations method instead.")] Yarp.YarpCluster AddCluster(string clusterName, object[] destinations); + [AspireExportIgnore(Reason = "Use the exported addRoute helper instead.")] Yarp.YarpRoute AddRoute(string path, Yarp.YarpCluster cluster); } public static partial class YarpConfigurationBuilderExtensions { - [AspireExport("addCatchAllRouteFromEndpoint", Description = "Adds a YARP catch-all route for an endpoint reference.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the exported addCatchAllRoute dispatcher.")] public static Yarp.YarpRoute AddRoute(this IYarpConfigurationBuilder builder, ApplicationModel.EndpointReference endpoint) { throw null; } - [AspireExport("addCatchAllRouteFromExternalService", Description = "Adds a YARP catch-all route for an external service resource.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the exported addCatchAllRoute dispatcher.")] public static Yarp.YarpRoute AddRoute(this IYarpConfigurationBuilder builder, ApplicationModel.IResourceBuilder externalService) { throw null; } - [AspireExport("addCatchAllRouteFromResource", Description = "Adds a YARP catch-all route for a resource that supports service discovery.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the exported addCatchAllRoute dispatcher.")] public static Yarp.YarpRoute AddRoute(this IYarpConfigurationBuilder builder, ApplicationModel.IResourceBuilder resource) { throw null; } - [AspireExport("addCatchAllRoute", Description = "Adds a YARP catch-all route for an existing cluster.")] + [AspireExportIgnore(Reason = "Use the exported addCatchAllRoute helper instead.")] public static Yarp.YarpRoute AddRoute(this IYarpConfigurationBuilder builder, Yarp.YarpCluster cluster) { throw null; } - [AspireExport("addRouteFromEndpoint", Description = "Adds a YARP route for an endpoint reference.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the exported addRoute dispatcher.")] public static Yarp.YarpRoute AddRoute(this IYarpConfigurationBuilder builder, string path, ApplicationModel.EndpointReference endpoint) { throw null; } - [AspireExport("addRouteFromExternalService", Description = "Adds a YARP route for an external service resource.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the exported addRoute dispatcher.")] public static Yarp.YarpRoute AddRoute(this IYarpConfigurationBuilder builder, string path, ApplicationModel.IResourceBuilder externalService) { throw null; } - [AspireExport("addRouteFromResource", Description = "Adds a YARP route for a resource that supports service discovery.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the exported addRoute dispatcher.")] public static Yarp.YarpRoute AddRoute(this IYarpConfigurationBuilder builder, string path, ApplicationModel.IResourceBuilder resource) { throw null; } } public static partial class YarpResourceExtensions { - [AspireExport("addYarp", Description = "Adds a YARP container to the application model.")] + [AspireExport(Description = "Adds a YARP container to the application model.")] public static ApplicationModel.IResourceBuilder AddYarp(this IDistributedApplicationBuilder builder, string name) { throw null; } - [AspireExport("publishWithStaticFiles", Description = "In publish mode, generates a Dockerfile that copies static files from the specified resource into /app/wwwroot.")] + [AspireExport(Description = "In publish mode, generates a Dockerfile that copies static files from the specified resource into /app/wwwroot.")] public static ApplicationModel.IResourceBuilder PublishWithStaticFiles(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder resourceWithFiles) { throw null; } - [AspireExport("withConfiguration", Description = "Configure the YARP resource.", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Configure the YARP resource.", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder WithConfiguration(this ApplicationModel.IResourceBuilder builder, System.Action configurationBuilder) { throw null; } - [AspireExport("withHostHttpsPort", Description = "Configures the host HTTPS port that the YARP resource is exposed on instead of using randomly assigned port.")] + [AspireExport(Description = "Configures the host HTTPS port that the YARP resource is exposed on instead of using randomly assigned port.")] public static ApplicationModel.IResourceBuilder WithHostHttpsPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } - [AspireExport("withHostPort", Description = "Configures the host port that the YARP resource is exposed on instead of using randomly assigned port.")] + [AspireExport(Description = "Configures the host port that the YARP resource is exposed on instead of using randomly assigned port.")] public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } [AspireExport("withStaticFiles2", MethodName = "withStaticFiles", Description = "Enables static file serving. In run mode: bind mounts to /wwwroot.")] @@ -99,7 +100,7 @@ public static partial class YarpClusterExtensions [AspireExportIgnore(Reason = "HttpClientConfig is not ATS-compatible. Use the DTO-based overload instead.")] public static YarpCluster WithHttpClientConfig(this YarpCluster cluster, global::Yarp.ReverseProxy.Configuration.HttpClientConfig config) { throw null; } - [AspireExport("withLoadBalancingPolicy", Description = "Sets the load balancing policy for the cluster.")] + [AspireExport(Description = "Sets the load balancing policy for the cluster.")] public static YarpCluster WithLoadBalancingPolicy(this YarpCluster cluster, string policy) { throw null; } [AspireExport("withClusterMetadata", MethodName = "withMetadata", Description = "Sets metadata for the cluster.")] @@ -128,31 +129,31 @@ public static partial class YarpRouteExtensions [AspireExportIgnore(Reason = "RouteHeader is not ATS-compatible. Use the DTO-based overload instead.")] public static YarpRoute WithMatchHeaders(this YarpRoute route, params global::Yarp.ReverseProxy.Configuration.RouteHeader[] headers) { throw null; } - [AspireExport("withMatchHosts", Description = "Matches requests that contain the specified host headers.")] + [AspireExport(Description = "Matches requests that contain the specified host headers.")] public static YarpRoute WithMatchHosts(this YarpRoute route, params string[] hosts) { throw null; } - [AspireExport("withMatchMethods", Description = "Matches requests that use the specified HTTP methods.")] + [AspireExport(Description = "Matches requests that use the specified HTTP methods.")] public static YarpRoute WithMatchMethods(this YarpRoute route, params string[] methods) { throw null; } - [AspireExport("withMatchPath", Description = "Matches requests with the specified path pattern.")] + [AspireExport(Description = "Matches requests with the specified path pattern.")] public static YarpRoute WithMatchPath(this YarpRoute route, string path) { throw null; } [AspireExportIgnore(Reason = "RouteQueryParameter is not ATS-compatible. Use the DTO-based overload instead.")] public static YarpRoute WithMatchRouteQueryParameter(this YarpRoute route, params global::Yarp.ReverseProxy.Configuration.RouteQueryParameter[] queryParameters) { throw null; } - [AspireExport("withMaxRequestBodySize", Description = "Sets the maximum request body size for the route.")] + [AspireExport(Description = "Sets the maximum request body size for the route.")] public static YarpRoute WithMaxRequestBodySize(this YarpRoute route, long maxRequestBodySize) { throw null; } [AspireExport("withRouteMetadata", MethodName = "withMetadata", Description = "Sets metadata for the route.")] public static YarpRoute WithMetadata(this YarpRoute route, System.Collections.Generic.IReadOnlyDictionary? metadata) { throw null; } - [AspireExport("withOrder", Description = "Sets the route order.")] + [AspireExport(Description = "Sets the route order.")] public static YarpRoute WithOrder(this YarpRoute route, int? order) { throw null; } [AspireExportIgnore(Reason = "Action> callbacks are not ATS-compatible.")] public static YarpRoute WithTransform(this YarpRoute route, System.Action> createTransform) { throw null; } - [AspireExport("withTransforms", Description = "Sets the transforms for the route.")] + [AspireExport(Description = "Sets the transforms for the route.")] public static YarpRoute WithTransforms(this YarpRoute route, System.Collections.Generic.IReadOnlyList>? transforms) { throw null; } } } @@ -161,19 +162,19 @@ namespace Aspire.Hosting.Yarp.Transforms { public static partial class ForwardedTransformExtensions { - [AspireExport("withTransformClientCertHeader", Description = "Adds the transform which will set the given header with the Base64 encoded client certificate.")] + [AspireExport(Description = "Adds the transform which will set the given header with the Base64 encoded client certificate.")] public static YarpRoute WithTransformClientCertHeader(this YarpRoute route, string headerName) { throw null; } - [AspireExport("withTransformForwarded", Description = "Adds the transform which will add the Forwarded header as defined by [RFC 7239](https://tools.ietf.org/html/rfc7239).")] + [AspireExport(Description = "Adds the transform which will add the Forwarded header as defined by [RFC 7239](https://tools.ietf.org/html/rfc7239).")] public static YarpRoute WithTransformForwarded(this YarpRoute route, bool useHost = true, bool useProto = true, global::Yarp.ReverseProxy.Transforms.NodeFormat forFormat = global::Yarp.ReverseProxy.Transforms.NodeFormat.Random, global::Yarp.ReverseProxy.Transforms.NodeFormat byFormat = global::Yarp.ReverseProxy.Transforms.NodeFormat.Random, global::Yarp.ReverseProxy.Transforms.ForwardedTransformActions action = global::Yarp.ReverseProxy.Transforms.ForwardedTransformActions.Set) { throw null; } - [AspireExport("withTransformXForwarded", Description = "Adds the transform which will add X-Forwarded-* headers.")] + [AspireExport(Description = "Adds the transform which will add X-Forwarded-* headers.")] public static YarpRoute WithTransformXForwarded(this YarpRoute route, string headerPrefix = "X-Forwarded-", global::Yarp.ReverseProxy.Transforms.ForwardedTransformActions xDefault = global::Yarp.ReverseProxy.Transforms.ForwardedTransformActions.Set, global::Yarp.ReverseProxy.Transforms.ForwardedTransformActions? xFor = null, global::Yarp.ReverseProxy.Transforms.ForwardedTransformActions? xHost = null, global::Yarp.ReverseProxy.Transforms.ForwardedTransformActions? xProto = null, global::Yarp.ReverseProxy.Transforms.ForwardedTransformActions? xPrefix = null) { throw null; } } public static partial class HttpMethodTransformExtensions { - [AspireExport("withTransformHttpMethodChange", Description = "Adds the transform that will replace the HTTP method if it matches.")] + [AspireExport(Description = "Adds the transform that will replace the HTTP method if it matches.")] public static YarpRoute WithTransformHttpMethodChange(this YarpRoute route, string fromHttpMethod, string toHttpMethod) { throw null; } } @@ -194,61 +195,61 @@ public static partial class PathTransformExtensions public static partial class QueryTransformExtensions { - [AspireExport("withTransformQueryRemoveKey", Description = "Adds the transform that will remove the given query key.")] + [AspireExport(Description = "Adds the transform that will remove the given query key.")] public static YarpRoute WithTransformQueryRemoveKey(this YarpRoute route, string queryKey) { throw null; } - [AspireExport("withTransformQueryRouteValue", Description = "Adds the transform that will append or set the query parameter from a route value.")] + [AspireExport(Description = "Adds the transform that will append or set the query parameter from a route value.")] public static YarpRoute WithTransformQueryRouteValue(this YarpRoute route, string queryKey, string routeValueKey, bool append = true) { throw null; } - [AspireExport("withTransformQueryValue", Description = "Adds the transform that will append or set the query parameter from the given value.")] + [AspireExport(Description = "Adds the transform that will append or set the query parameter from the given value.")] public static YarpRoute WithTransformQueryValue(this YarpRoute route, string queryKey, string value, bool append = true) { throw null; } } public static partial class RequestHeadersTransformExtensions { - [AspireExport("withTransformCopyRequestHeaders", Description = "Adds the transform which will enable or suppress copying request headers to the proxy request.")] + [AspireExport(Description = "Adds the transform which will enable or suppress copying request headers to the proxy request.")] public static YarpRoute WithTransformCopyRequestHeaders(this YarpRoute route, bool copy = true) { throw null; } - [AspireExport("withTransformRequestHeader", Description = "Adds the transform which will append or set the request header.")] + [AspireExport(Description = "Adds the transform which will append or set the request header.")] public static YarpRoute WithTransformRequestHeader(this YarpRoute route, string headerName, string value, bool append = true) { throw null; } - [AspireExport("withTransformRequestHeaderRemove", Description = "Adds the transform which will remove the request header.")] + [AspireExport(Description = "Adds the transform which will remove the request header.")] public static YarpRoute WithTransformRequestHeaderRemove(this YarpRoute route, string headerName) { throw null; } - [AspireExport("withTransformRequestHeaderRouteValue", Description = "Adds the transform which will append or set the request header from a route value.")] + [AspireExport(Description = "Adds the transform which will append or set the request header from a route value.")] public static YarpRoute WithTransformRequestHeaderRouteValue(this YarpRoute route, string headerName, string routeValueKey, bool append = true) { throw null; } - [AspireExport("withTransformRequestHeadersAllowed", Description = "Adds the transform which will only copy the allowed request headers. Other transforms")] + [AspireExport(Description = "Adds the transform which will only copy the allowed request headers. Other transforms")] public static YarpRoute WithTransformRequestHeadersAllowed(this YarpRoute route, params string[] allowedHeaders) { throw null; } - [AspireExport("withTransformUseOriginalHostHeader", Description = "Adds the transform which will copy the incoming request Host header to the proxy request.")] + [AspireExport(Description = "Adds the transform which will copy the incoming request Host header to the proxy request.")] public static YarpRoute WithTransformUseOriginalHostHeader(this YarpRoute route, bool useOriginal = true) { throw null; } } public static partial class ResponseTransformExtensions { - [AspireExport("withTransformCopyResponseHeaders", Description = "Adds the transform which will enable or suppress copying response headers to the client response.")] + [AspireExport(Description = "Adds the transform which will enable or suppress copying response headers to the client response.")] public static YarpRoute WithTransformCopyResponseHeaders(this YarpRoute route, bool copy = true) { throw null; } - [AspireExport("withTransformCopyResponseTrailers", Description = "Adds the transform which will enable or suppress copying response trailers to the client response.")] + [AspireExport(Description = "Adds the transform which will enable or suppress copying response trailers to the client response.")] public static YarpRoute WithTransformCopyResponseTrailers(this YarpRoute route, bool copy = true) { throw null; } - [AspireExport("withTransformResponseHeader", Description = "Adds the transform which will append or set the response header.")] + [AspireExport(Description = "Adds the transform which will append or set the response header.")] public static YarpRoute WithTransformResponseHeader(this YarpRoute route, string headerName, string value, bool append = true, global::Yarp.ReverseProxy.Transforms.ResponseCondition condition = global::Yarp.ReverseProxy.Transforms.ResponseCondition.Success) { throw null; } - [AspireExport("withTransformResponseHeaderRemove", Description = "Adds the transform which will remove the response header.")] + [AspireExport(Description = "Adds the transform which will remove the response header.")] public static YarpRoute WithTransformResponseHeaderRemove(this YarpRoute route, string headerName, global::Yarp.ReverseProxy.Transforms.ResponseCondition condition = global::Yarp.ReverseProxy.Transforms.ResponseCondition.Success) { throw null; } - [AspireExport("withTransformResponseHeadersAllowed", Description = "Adds the transform which will only copy the allowed response headers. Other transforms")] + [AspireExport(Description = "Adds the transform which will only copy the allowed response headers. Other transforms")] public static YarpRoute WithTransformResponseHeadersAllowed(this YarpRoute route, params string[] allowedHeaders) { throw null; } - [AspireExport("withTransformResponseTrailer", Description = "Adds the transform which will append or set the response trailer.")] + [AspireExport(Description = "Adds the transform which will append or set the response trailer.")] public static YarpRoute WithTransformResponseTrailer(this YarpRoute route, string headerName, string value, bool append = true, global::Yarp.ReverseProxy.Transforms.ResponseCondition condition = global::Yarp.ReverseProxy.Transforms.ResponseCondition.Success) { throw null; } - [AspireExport("withTransformResponseTrailerRemove", Description = "Adds the transform which will remove the response trailer.")] + [AspireExport(Description = "Adds the transform which will remove the response trailer.")] public static YarpRoute WithTransformResponseTrailerRemove(this YarpRoute route, string headerName, global::Yarp.ReverseProxy.Transforms.ResponseCondition condition = global::Yarp.ReverseProxy.Transforms.ResponseCondition.Success) { throw null; } - [AspireExport("withTransformResponseTrailersAllowed", Description = "Adds the transform which will only copy the allowed response trailers. Other transforms")] + [AspireExport(Description = "Adds the transform which will only copy the allowed response trailers. Other transforms")] public static YarpRoute WithTransformResponseTrailersAllowed(this YarpRoute route, params string[] allowedHeaders) { throw null; } } } \ No newline at end of file diff --git a/src/Aspire.Hosting/api/Aspire.Hosting.cs b/src/Aspire.Hosting/api/Aspire.Hosting.cs index 9ab38d3821f..60c26a7b764 100644 --- a/src/Aspire.Hosting/api/Aspire.Hosting.cs +++ b/src/Aspire.Hosting/api/Aspire.Hosting.cs @@ -56,6 +56,17 @@ public AspireUnionAttribute(params System.Type[] types) { } public System.Type[] Types { get { throw null; } } } + [System.AttributeUsage(System.AttributeTargets.Property | System.AttributeTargets.Field, Inherited = false, AllowMultiple = false)] + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREATS001")] + public sealed partial class AspireValueAttribute : System.Attribute + { + public AspireValueAttribute(string catalogName) { } + + public string CatalogName { get { throw null; } } + + public string? Name { get { throw null; } set { } } + } + public static partial class ConnectionPropertiesExtensions { [AspireExportIgnore(Reason = "Connection property merging is an internal helper and is not part of the ATS surface.")] @@ -64,14 +75,14 @@ public static partial class ConnectionPropertiesExtensions public static partial class ConnectionStringBuilderExtensions { - [AspireExport("addConnectionStringExpression", Description = "Adds a connection string with a reference expression")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addConnectionString dispatcher export.")] public static ApplicationModel.IResourceBuilder AddConnectionString(this IDistributedApplicationBuilder builder, string name, ApplicationModel.ReferenceExpression connectionStringExpression) { throw null; } - [AspireExport("addConnectionStringBuilder", Description = "Adds a connection string with a builder callback", RunSyncOnBackgroundThread = true)] + [AspireExportIgnore(Reason = "Polyglot app hosts should build a ReferenceExpression explicitly and use the canonical addConnectionString export.")] public static ApplicationModel.IResourceBuilder AddConnectionString(this IDistributedApplicationBuilder builder, string name, System.Action connectionStringBuilder) { throw null; } } - public sealed partial class ConnectionStringResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithWaitSupport + public sealed partial class ConnectionStringResource : ApplicationModel.Resource, ApplicationModel.IResourceWithConnectionString, ApplicationModel.IResource, ApplicationModel.IExpressionValue, ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider, ApplicationModel.IValueWithReferences, ApplicationModel.IResourceWithWaitSupport { public ConnectionStringResource(string name, ApplicationModel.ReferenceExpression connectionStringExpression) : base(default!) { } @@ -81,15 +92,15 @@ public ConnectionStringResource(string name, ApplicationModel.ReferenceExpressio public static partial class ContainerRegistryResourceBuilderExtensions { [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMPUTE003", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] - [AspireExport("addContainerRegistry", Description = "Adds a container registry resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addContainerRegistry dispatcher export.")] public static ApplicationModel.IResourceBuilder AddContainerRegistry(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder endpoint, ApplicationModel.IResourceBuilder? repository = null) { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMPUTE003", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] - [AspireExport("addContainerRegistryFromString", Description = "Adds a container registry with string endpoint")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addContainerRegistry dispatcher export.")] public static ApplicationModel.IResourceBuilder AddContainerRegistry(this IDistributedApplicationBuilder builder, string name, string endpoint, string? repository = null) { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMPUTE003", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] - [AspireExport("withContainerRegistry", Description = "Configures a resource to use a container registry")] + [AspireExport(Description = "Configures a resource to use a container registry")] public static ApplicationModel.IResourceBuilder WithContainerRegistry(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder registry) where TDestination : ApplicationModel.IResource where TContainerRegistry : ApplicationModel.IResource, ApplicationModel.IContainerRegistry { throw null; } } @@ -102,14 +113,14 @@ public static partial class ContainerResourceBuilderExtensions [AspireExportIgnore(Reason = "Use the polyglot addContainer overload that accepts a string or AddContainerOptions value.")] public static ApplicationModel.IResourceBuilder AddContainer(this IDistributedApplicationBuilder builder, string name, string image) { throw null; } - [AspireExport("addDockerfile", Description = "Adds a container resource built from a Dockerfile")] + [AspireExport(Description = "Adds a container resource built from a Dockerfile")] public static ApplicationModel.IResourceBuilder AddDockerfile(this IDistributedApplicationBuilder builder, string name, string contextPath, string? dockerfilePath = null, string? stage = null) { throw null; } - [AspireExportIgnore(Reason = "DockerfileBuilderCallbackContext is not an ATS-exported callback context.")] + [AspireExportIgnore(Reason = "This synchronous overload is excluded from the polyglot surface; only the async callback overload is exported.")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder AddDockerfileBuilder(this IDistributedApplicationBuilder builder, string name, string contextPath, System.Action callback, string? stage = null) { throw null; } - [AspireExportIgnore(Reason = "DockerfileBuilderCallbackContext is not an ATS-exported callback context.")] + [AspireExport(Description = "Adds a container resource built from a programmatically generated Dockerfile")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder AddDockerfileBuilder(this IDistributedApplicationBuilder builder, string name, string contextPath, System.Func callback, string? stage = null) { throw null; } @@ -119,11 +130,11 @@ public static partial class ContainerResourceBuilderExtensions [AspireExportIgnore(Reason = "DockerfileFactoryContext exposes IServiceProvider and IResource — .NET runtime types not usable from polyglot hosts.")] public static ApplicationModel.IResourceBuilder AddDockerfileFactory(this IDistributedApplicationBuilder builder, string name, string contextPath, System.Func> dockerfileFactory, string? stage = null) { throw null; } - [AspireExport("publishAsContainer", Description = "Configures the resource to be published as a container")] + [AspireExport(Description = "Configures the resource to be published as a container")] public static ApplicationModel.IResourceBuilder PublishAsContainer(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withBindMount", Description = "Adds a bind mount")] + [AspireExport(Description = "Adds a bind mount")] public static ApplicationModel.IResourceBuilder WithBindMount(this ApplicationModel.IResourceBuilder builder, string source, string target, bool isReadOnly = false) where T : ApplicationModel.ContainerResource { throw null; } @@ -155,11 +166,11 @@ public static ApplicationModel.IResourceBuilder WithContainerFiles(this Ap public static ApplicationModel.IResourceBuilder WithContainerFiles(this ApplicationModel.IResourceBuilder builder, string destinationPath, string sourcePath, int? defaultOwner = null, int? defaultGroup = null, System.IO.UnixFileMode? umask = null) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withContainerName", Description = "Sets the container name")] + [AspireExport(Description = "Sets the container name")] public static ApplicationModel.IResourceBuilder WithContainerName(this ApplicationModel.IResourceBuilder builder, string name) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withContainerNetworkAlias", Description = "Adds a network alias for the container")] + [AspireExport(Description = "Adds a network alias for the container")] public static ApplicationModel.IResourceBuilder WithContainerNetworkAlias(this ApplicationModel.IResourceBuilder builder, string alias) where T : ApplicationModel.ContainerResource { throw null; } @@ -171,25 +182,25 @@ public static ApplicationModel.IResourceBuilder WithContainerRuntimeArgs(t public static ApplicationModel.IResourceBuilder WithContainerRuntimeArgs(this ApplicationModel.IResourceBuilder builder, System.Func callback) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withContainerRuntimeArgs", Description = "Adds runtime arguments for the container")] + [AspireExport(Description = "Adds runtime arguments for the container")] public static ApplicationModel.IResourceBuilder WithContainerRuntimeArgs(this ApplicationModel.IResourceBuilder builder, params string[] args) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withDockerfile", Description = "Configures the resource to use a Dockerfile")] + [AspireExport(Description = "Configures the resource to use a Dockerfile")] public static ApplicationModel.IResourceBuilder WithDockerfile(this ApplicationModel.IResourceBuilder builder, string contextPath, string? dockerfilePath = null, string? stage = null) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withDockerfileBaseImage", Description = "Sets the base image for a Dockerfile build")] + [AspireExport(Description = "Sets the base image for a Dockerfile build")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder WithDockerfileBaseImage(this ApplicationModel.IResourceBuilder builder, string? buildImage = null, string? runtimeImage = null) where T : ApplicationModel.IResource { throw null; } - [AspireExportIgnore(Reason = "DockerfileBuilderCallbackContext is not an ATS-exported callback context.")] + [AspireExportIgnore(Reason = "This synchronous overload is excluded from the polyglot surface; only the async callback overload is exported.")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder WithDockerfileBuilder(this ApplicationModel.IResourceBuilder builder, string contextPath, System.Action callback, string? stage = null) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExportIgnore(Reason = "DockerfileBuilderCallbackContext is not an ATS-exported callback context.")] + [AspireExport(Description = "Configures the resource to use a programmatically generated Dockerfile")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static ApplicationModel.IResourceBuilder WithDockerfileBuilder(this ApplicationModel.IResourceBuilder builder, string contextPath, System.Func callback, string? stage = null) where T : ApplicationModel.ContainerResource { throw null; } @@ -202,35 +213,35 @@ public static ApplicationModel.IResourceBuilder WithDockerfileFactory(this public static ApplicationModel.IResourceBuilder WithDockerfileFactory(this ApplicationModel.IResourceBuilder builder, string contextPath, System.Func> dockerfileFactory, string? stage = null) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withEndpointProxySupport", Description = "Configures endpoint proxy support")] + [AspireExport(Description = "Configures endpoint proxy support")] public static ApplicationModel.IResourceBuilder WithEndpointProxySupport(this ApplicationModel.IResourceBuilder builder, bool proxyEnabled) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withEntrypoint", Description = "Sets the container entrypoint")] + [AspireExport(Description = "Sets the container entrypoint")] public static ApplicationModel.IResourceBuilder WithEntrypoint(this ApplicationModel.IResourceBuilder builder, string entrypoint) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withImage", Description = "Sets the container image")] + [AspireExport(Description = "Sets the container image")] public static ApplicationModel.IResourceBuilder WithImage(this ApplicationModel.IResourceBuilder builder, string image, string? tag = null) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withImagePullPolicy", Description = "Sets the container image pull policy")] + [AspireExport(Description = "Sets the container image pull policy")] public static ApplicationModel.IResourceBuilder WithImagePullPolicy(this ApplicationModel.IResourceBuilder builder, ApplicationModel.ImagePullPolicy pullPolicy) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withImageRegistry", Description = "Sets the container image registry")] + [AspireExport(Description = "Sets the container image registry")] public static ApplicationModel.IResourceBuilder WithImageRegistry(this ApplicationModel.IResourceBuilder builder, string? registry) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withImageSHA256", Description = "Sets the image SHA256 digest")] + [AspireExport(Description = "Sets the image SHA256 digest")] public static ApplicationModel.IResourceBuilder WithImageSHA256(this ApplicationModel.IResourceBuilder builder, string sha256) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withImageTag", Description = "Sets the container image tag")] + [AspireExport(Description = "Sets the container image tag")] public static ApplicationModel.IResourceBuilder WithImageTag(this ApplicationModel.IResourceBuilder builder, string tag) where T : ApplicationModel.ContainerResource { throw null; } - [AspireExport("withLifetime", Description = "Sets the lifetime behavior of the container resource")] + [AspireExport(Description = "Sets the lifetime behavior of the container resource")] public static ApplicationModel.IResourceBuilder WithLifetime(this ApplicationModel.IResourceBuilder builder, ApplicationModel.ContainerLifetime lifetime) where T : ApplicationModel.ContainerResource { throw null; } @@ -275,7 +286,7 @@ public DistributedApplication(Microsoft.Extensions.Hosting.IHost host) { } public static IDistributedApplicationBuilder CreateBuilder(DistributedApplicationOptions options) { throw null; } - [AspireExport("createBuilder", Description = "Creates a new distributed application builder")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal createBuilder dispatcher export.")] public static IDistributedApplicationBuilder CreateBuilder(string[] args) { throw null; } public virtual void Dispose() { } @@ -348,10 +359,22 @@ public static bool TryCreateResourceBuilder(this IDistributedApplicationBuild public static partial class DistributedApplicationEventingExtensions { + [AspireExportIgnore(Reason = "Complex generic delegates with event/CancellationToken types — not ATS-compatible.")] + public static T OnAfterPublish(this T builder, System.Func callback) + where T : IDistributedApplicationBuilder { throw null; } + + [AspireExportIgnore(Reason = "Complex generic delegates with event/CancellationToken types — not ATS-compatible.")] + public static T OnBeforePublish(this T builder, System.Func callback) + where T : IDistributedApplicationBuilder { throw null; } + [AspireExportIgnore(Reason = "Complex generic delegates with event/CancellationToken types — not ATS-compatible.")] public static ApplicationModel.IResourceBuilder OnBeforeResourceStarted(this ApplicationModel.IResourceBuilder builder, System.Func callback) where T : ApplicationModel.IResource { throw null; } + [AspireExportIgnore(Reason = "Complex generic delegates with event/CancellationToken types — not ATS-compatible.")] + public static T OnBeforeStart(this T builder, System.Func callback) + where T : IDistributedApplicationBuilder { throw null; } + [AspireExportIgnore(Reason = "Complex generic delegates with event/CancellationToken types — not ATS-compatible.")] public static ApplicationModel.IResourceBuilder OnConnectionStringAvailable(this ApplicationModel.IResourceBuilder builder, System.Func callback) where T : ApplicationModel.IResourceWithConnectionString { throw null; } @@ -448,34 +471,34 @@ public sealed partial class DistributedApplicationOptions [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOTNETTOOL", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static partial class DotnetToolResourceExtensions { - [AspireExport("addDotnetTool", Description = "Adds a .NET tool resource")] + [AspireExport(Description = "Adds a .NET tool resource")] public static ApplicationModel.IResourceBuilder AddDotnetTool(this IDistributedApplicationBuilder builder, string name, string packageId) { throw null; } [AspireExportIgnore(Reason = "Open generic IResource constraint — not ATS-compatible.")] public static ApplicationModel.IResourceBuilder AddDotnetTool(this IDistributedApplicationBuilder builder, T resource) where T : ApplicationModel.DotnetToolResource { throw null; } - [AspireExport("withToolIgnoreExistingFeeds", Description = "Ignores existing NuGet feeds")] + [AspireExport(Description = "Ignores existing NuGet feeds")] public static ApplicationModel.IResourceBuilder WithToolIgnoreExistingFeeds(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.DotnetToolResource { throw null; } - [AspireExport("withToolIgnoreFailedSources", Description = "Ignores failed NuGet sources")] + [AspireExport(Description = "Ignores failed NuGet sources")] public static ApplicationModel.IResourceBuilder WithToolIgnoreFailedSources(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.DotnetToolResource { throw null; } - [AspireExport("withToolPackage", Description = "Sets the tool package ID")] + [AspireExport(Description = "Sets the tool package ID")] public static ApplicationModel.IResourceBuilder WithToolPackage(this ApplicationModel.IResourceBuilder builder, string packageId) where T : ApplicationModel.DotnetToolResource { throw null; } - [AspireExport("withToolPrerelease", Description = "Allows prerelease tool versions")] + [AspireExport(Description = "Allows prerelease tool versions")] public static ApplicationModel.IResourceBuilder WithToolPrerelease(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.DotnetToolResource { throw null; } - [AspireExport("withToolSource", Description = "Adds a NuGet source for the tool")] + [AspireExport(Description = "Adds a NuGet source for the tool")] public static ApplicationModel.IResourceBuilder WithToolSource(this ApplicationModel.IResourceBuilder builder, string source) where T : ApplicationModel.DotnetToolResource { throw null; } - [AspireExport("withToolVersion", Description = "Sets the tool version")] + [AspireExport(Description = "Sets the tool version")] public static ApplicationModel.IResourceBuilder WithToolVersion(this ApplicationModel.IResourceBuilder builder, string version) where T : ApplicationModel.DotnetToolResource { throw null; } } @@ -491,10 +514,10 @@ public static partial class ExecutableResourceBuilderExtensions [AspireExportIgnore(Reason = "Uses object[] parameter which is not ATS-compatible. String[] overload is exported.")] public static ApplicationModel.IResourceBuilder AddExecutable(this IDistributedApplicationBuilder builder, string name, string command, string workingDirectory, params object[]? args) { throw null; } - [AspireExport("addExecutable", Description = "Adds an executable resource")] + [AspireExport(Description = "Adds an executable resource")] public static ApplicationModel.IResourceBuilder AddExecutable(this IDistributedApplicationBuilder builder, string name, string command, string workingDirectory, params string[]? args) { throw null; } - [AspireExport("publishAsDockerFileWithConfigure", Description = "Publishes an executable as a Docker file with optional container configuration", RunSyncOnBackgroundThread = true)] + [AspireExport(Description = "Publishes an executable as a Docker file", RunSyncOnBackgroundThread = true)] public static ApplicationModel.IResourceBuilder PublishAsDockerFile(this ApplicationModel.IResourceBuilder builder, System.Action>? configure) where T : ApplicationModel.ExecutableResource { throw null; } @@ -502,7 +525,7 @@ public static ApplicationModel.IResourceBuilder PublishAsDockerFile(this A public static ApplicationModel.IResourceBuilder PublishAsDockerFile(this ApplicationModel.IResourceBuilder builder, System.Collections.Generic.IEnumerable? buildArgs) where T : ApplicationModel.ExecutableResource { throw null; } - [AspireExport("publishAsDockerFile", Description = "Publishes the executable as a Docker container")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the overload with the optional configure callback.")] public static ApplicationModel.IResourceBuilder PublishAsDockerFile(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.ExecutableResource { throw null; } @@ -510,7 +533,7 @@ public static ApplicationModel.IResourceBuilder PublishAsDockerFile(this A public static ApplicationModel.IResourceBuilder WithCommand(this ApplicationModel.IResourceBuilder builder, string command) where T : ApplicationModel.ExecutableResource { throw null; } - [AspireExport("withWorkingDirectory", Description = "Sets the executable working directory")] + [AspireExport(Description = "Sets the executable working directory")] public static ApplicationModel.IResourceBuilder WithWorkingDirectory(this ApplicationModel.IResourceBuilder builder, string workingDirectory) where T : ApplicationModel.ExecutableResource { throw null; } } @@ -523,16 +546,16 @@ public static partial class ExecutableResourceExtensions public static partial class ExternalServiceBuilderExtensions { - [AspireExport("addExternalServiceParameter", Description = "Adds an external service with a parameter URL")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addExternalService dispatcher export.")] public static ApplicationModel.IResourceBuilder AddExternalService(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder urlParameter) { throw null; } - [AspireExport("addExternalService", Description = "Adds an external service resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addExternalService dispatcher export.")] public static ApplicationModel.IResourceBuilder AddExternalService(this IDistributedApplicationBuilder builder, string name, string url) { throw null; } - [AspireExport("addExternalServiceUri", Description = "Adds an external service with a URI")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addExternalService dispatcher export.")] public static ApplicationModel.IResourceBuilder AddExternalService(this IDistributedApplicationBuilder builder, string name, System.Uri uri) { throw null; } - [AspireExport("withExternalServiceHttpHealthCheck", Description = "Adds an HTTP health check to an external service")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withHttpHealthCheck export wrapper.")] public static ApplicationModel.IResourceBuilder WithHttpHealthCheck(this ApplicationModel.IResourceBuilder builder, string? path = null, int? statusCode = null) { throw null; } } @@ -584,6 +607,7 @@ public partial interface IDistributedApplicationBuilder ApplicationModel.IResourceCollection Resources { get; } + [AspireExportIgnore(Reason = "IServiceCollection is not exported to ATS. Use IDistributedApplicationBuilder.addEventingSubscriber or tryAddEventingSubscriber for ATS event subscriber registration.")] Microsoft.Extensions.DependencyInjection.IServiceCollection Services { get; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIREUSERSECRETS001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] @@ -591,7 +615,7 @@ public partial interface IDistributedApplicationBuilder ApplicationModel.IResourceBuilder AddResource(T resource) where T : ApplicationModel.IResource; - [AspireExport("build", Description = "Builds the distributed application")] + [AspireExport(Description = "Builds the distributed application")] DistributedApplication Build(); ApplicationModel.IResourceBuilder CreateResourceBuilder(T resource) where T : ApplicationModel.IResource; @@ -778,6 +802,8 @@ public partial interface IUserSecretsManager void GetOrSetSecret(Microsoft.Extensions.Configuration.IConfigurationManager configuration, string name, System.Func valueGenerator); [AspireExportIgnore(Reason = "JsonObject is not ATS-compatible. Use the ATS helper overload that accepts a JSON string.")] System.Threading.Tasks.Task SaveStateAsync(System.Text.Json.Nodes.JsonObject state, System.Threading.CancellationToken cancellationToken = default); + [AspireExport(Description = "Attempts to delete a user secret value")] + bool TryDeleteSecret(string name); [AspireExport(Description = "Attempts to set a user secret value")] bool TrySetSecret(string name, string value); } @@ -830,7 +856,7 @@ public sealed partial class LoadInputContext public static partial class McpServerResourceBuilderExtensions { [System.Diagnostics.CodeAnalysis.Experimental("ASPIREMCP001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] - [AspireExport("withMcpServer", Description = "Configures an MCP server endpoint on the resource")] + [AspireExport(Description = "Configures an MCP server endpoint on the resource")] public static ApplicationModel.IResourceBuilder WithMcpServer(this ApplicationModel.IResourceBuilder builder, string? path = "/mcp", string? endpointName = null) where T : ApplicationModel.IResourceWithEndpoints { throw null; } } @@ -875,11 +901,11 @@ public static void AddOtlpEnvironment(ApplicationModel.IResource resource, Micro public static void AddOtlpEnvironment(ApplicationModel.IResource resource, Microsoft.Extensions.Configuration.IConfiguration configuration, Microsoft.Extensions.Hosting.IHostEnvironment environment) { } - [AspireExport("withOtlpExporterProtocol", Description = "Configures OTLP telemetry export with specific protocol")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withOtlpExporter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithOtlpExporter(this ApplicationModel.IResourceBuilder builder, OtlpProtocol protocol) where T : ApplicationModel.IResourceWithEnvironment { throw null; } - [AspireExport("withOtlpExporter", Description = "Configures OTLP telemetry export")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withOtlpExporter dispatcher export.")] public static ApplicationModel.IResourceBuilder WithOtlpExporter(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IResourceWithEnvironment { throw null; } } @@ -907,22 +933,22 @@ public ParameterProcessor(ApplicationModel.ResourceNotificationService notificat public static partial class ParameterResourceBuilderExtensions { - [AspireExport("addConnectionString", Description = "Adds a connection string resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addConnectionString dispatcher export.")] public static ApplicationModel.IResourceBuilder AddConnectionString(this IDistributedApplicationBuilder builder, string name, string? environmentVariableName = null) { throw null; } [AspireExportIgnore(Reason = "ParameterDefault is not an ATS-exported type.")] public static ApplicationModel.IResourceBuilder AddParameter(this IDistributedApplicationBuilder builder, string name, ApplicationModel.ParameterDefault value, bool secret = false, bool persist = false) { throw null; } - [AspireExport("addParameter", Description = "Adds a parameter resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder AddParameter(this IDistributedApplicationBuilder builder, string name, bool secret = false) { throw null; } [AspireExportIgnore(Reason = "Raw Func delegate — not ATS-compatible.")] public static ApplicationModel.IResourceBuilder AddParameter(this IDistributedApplicationBuilder builder, string name, System.Func valueGetter, bool publishValueAsDefault = false, bool secret = false) { throw null; } - [AspireExport("addParameterWithValue", Description = "Adds a parameter with a default value")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addParameter dispatcher export.")] public static ApplicationModel.IResourceBuilder AddParameter(this IDistributedApplicationBuilder builder, string name, string value, bool publishValueAsDefault = false, bool secret = false) { throw null; } - [AspireExport("addParameterFromConfiguration", Description = "Adds a parameter sourced from configuration")] + [AspireExport(Description = "Adds a parameter sourced from configuration")] public static ApplicationModel.IResourceBuilder AddParameterFromConfiguration(this IDistributedApplicationBuilder builder, string name, string configurationKey, bool secret = false) { throw null; } public static void ConfigureConnectionStringManifestPublisher(ApplicationModel.IResourceBuilder builder) { } @@ -933,7 +959,7 @@ public static void ConfigureConnectionStringManifestPublisher(ApplicationModel.I public static ApplicationModel.ParameterResource CreateParameter(IDistributedApplicationBuilder builder, string name, bool secret) { throw null; } - [AspireExport("publishAsConnectionString", Description = "Publishes the resource as a connection string")] + [AspireExport(Description = "Publishes the resource as a connection string")] public static ApplicationModel.IResourceBuilder PublishAsConnectionString(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.ContainerResource, ApplicationModel.IResourceWithConnectionString { throw null; } @@ -941,27 +967,27 @@ public static ApplicationModel.IResourceBuilder PublishAsConnectionString( [AspireExportIgnore(Reason = "Complex Func delegate with InteractionInput — not ATS-compatible.")] public static ApplicationModel.IResourceBuilder WithCustomInput(this ApplicationModel.IResourceBuilder builder, System.Func createInput) { throw null; } - [AspireExport("withDescription", Description = "Sets a parameter description")] + [AspireExport(Description = "Sets a parameter description")] public static ApplicationModel.IResourceBuilder WithDescription(this ApplicationModel.IResourceBuilder builder, string description, bool enableMarkdown = false) { throw null; } } public static partial class ProjectResourceBuilderExtensions { [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECSHARPAPPS001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] - [AspireExport("addCSharpAppWithOptions", Description = "Adds a C# application resource with configuration options", RunSyncOnBackgroundThread = true)] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addCSharpApp dispatcher export.")] public static ApplicationModel.IResourceBuilder AddCSharpApp(this IDistributedApplicationBuilder builder, string name, string path, System.Action configure) { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECSHARPAPPS001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] - [AspireExport("addCSharpApp", Description = "Adds a C# application resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addCSharpApp dispatcher export.")] public static ApplicationModel.IResourceBuilder AddCSharpApp(this IDistributedApplicationBuilder builder, string name, string path) { throw null; } - [AspireExport("addProjectWithOptions", Description = "Adds a project resource with configuration options", RunSyncOnBackgroundThread = true)] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addProject dispatcher export.")] public static ApplicationModel.IResourceBuilder AddProject(this IDistributedApplicationBuilder builder, string name, string projectPath, System.Action configure) { throw null; } - [AspireExport("addProject", Description = "Adds a .NET project resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addProject dispatcher export.")] public static ApplicationModel.IResourceBuilder AddProject(this IDistributedApplicationBuilder builder, string name, string projectPath, string? launchProfileName) { throw null; } - [AspireExport("addProjectWithoutLaunchProfile", Description = "Adds a .NET project resource without a launch profile")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal addProject dispatcher export.")] public static ApplicationModel.IResourceBuilder AddProject(this IDistributedApplicationBuilder builder, string name, string projectPath) { throw null; } [AspireExportIgnore(Reason = "Uses IProjectMetadata generic constraint which is a .NET-specific type.")] @@ -976,7 +1002,7 @@ public static partial class ProjectResourceBuilderExtensions public static ApplicationModel.IResourceBuilder AddProject(this IDistributedApplicationBuilder builder, string name) where TProject : IProjectMetadata, new() { throw null; } - [AspireExport("disableForwardedHeaders", Description = "Disables forwarded headers for the project")] + [AspireExport(Description = "Disables forwarded headers for the project")] public static ApplicationModel.IResourceBuilder DisableForwardedHeaders(this ApplicationModel.IResourceBuilder builder) { throw null; } [AspireExport("publishProjectAsDockerFileWithConfigure", MethodName = "publishAsDockerFile", Description = "Publishes a project as a Docker file with optional container configuration", RunSyncOnBackgroundThread = true)] @@ -986,7 +1012,7 @@ public static ApplicationModel.IResourceBuilder PublishAsDockerFile(this A [AspireExportIgnore(Reason = "Uses Func which is not ATS-compatible.")] public static ApplicationModel.IResourceBuilder WithEndpointsInEnvironment(this ApplicationModel.IResourceBuilder builder, System.Func filter) { throw null; } - [AspireExport("withReplicas", Description = "Sets the number of replicas")] + [AspireExport(Description = "Sets the number of replicas")] public static ApplicationModel.IResourceBuilder WithReplicas(this ApplicationModel.IResourceBuilder builder, int replicas) { throw null; } } @@ -1007,37 +1033,37 @@ public static partial class RequiredCommandResourceExtensions public static ApplicationModel.IResourceBuilder WithRequiredCommand(this ApplicationModel.IResourceBuilder builder, string command, System.Func> validationCallback, string? helpLink = null) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withRequiredCommand", Description = "Adds a required command dependency")] + [AspireExport(Description = "Adds a required command dependency")] public static ApplicationModel.IResourceBuilder WithRequiredCommand(this ApplicationModel.IResourceBuilder builder, string command, string? helpLink = null) where T : ApplicationModel.IResource { throw null; } } public static partial class ResourceBuilderExtensions { - [AspireExport("asHttp2Service", Description = "Configures resource for HTTP/2")] + [AspireExport(Description = "Configures resource for HTTP/2")] public static ApplicationModel.IResourceBuilder AsHttp2Service(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExport("clearContainerFilesSources", Description = "Clears all container file sources")] + [AspireExport(Description = "Clears all container file sources")] public static ApplicationModel.IResourceBuilder ClearContainerFilesSources(this ApplicationModel.IResourceBuilder builder) where T : IResourceWithContainerFiles { throw null; } - [AspireExport("excludeFromManifest", Description = "Excludes the resource from the deployment manifest")] + [AspireExport(Description = "Excludes the resource from the deployment manifest")] public static ApplicationModel.IResourceBuilder ExcludeFromManifest(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IResource { throw null; } - [AspireExport("excludeFromMcp", Description = "Excludes the resource from MCP server exposure")] + [AspireExport(Description = "Excludes the resource from MCP server exposure")] public static ApplicationModel.IResourceBuilder ExcludeFromMcp(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IResource { throw null; } - [AspireExport("getConnectionProperty", Description = "Gets a connection property by key")] + [AspireExport(Description = "Gets a connection property by key")] public static ApplicationModel.ReferenceExpression GetConnectionProperty(this ApplicationModel.IResourceWithConnectionString resource, string key) { throw null; } [AspireExportIgnore(Reason = "NetworkIdentifier is not ATS-compatible.")] public static ApplicationModel.EndpointReference GetEndpoint(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.NetworkIdentifier contextNetworkID) where T : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExport("getEndpoint", Description = "Gets an endpoint reference")] + [AspireExport(Description = "Gets an endpoint reference")] public static ApplicationModel.EndpointReference GetEndpoint(this ApplicationModel.IResourceBuilder builder, string name) where T : ApplicationModel.IResourceWithEndpoints { throw null; } @@ -1050,11 +1076,11 @@ public static ApplicationModel.IResourceBuilder PublishWithContainerFiles( public static ApplicationModel.IResourceBuilder SubscribeHttpsEndpointsUpdate(this ApplicationModel.IResourceBuilder builder, System.Action callback) where TResource : ApplicationModel.IResource { throw null; } - [AspireExport("waitForWithBehavior", Description = "Waits for another resource with specific behavior")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal waitFor dispatcher export.")] public static ApplicationModel.IResourceBuilder WaitFor(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder dependency, ApplicationModel.WaitBehavior waitBehavior) where T : ApplicationModel.IResourceWithWaitSupport { throw null; } - [AspireExport("waitForResource", MethodName = "waitFor", Description = "Waits for another resource to be ready")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal waitFor dispatcher export.")] public static ApplicationModel.IResourceBuilder WaitFor(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder dependency) where T : ApplicationModel.IResourceWithWaitSupport { throw null; } @@ -1062,11 +1088,11 @@ public static ApplicationModel.IResourceBuilder WaitFor(this ApplicationMo public static ApplicationModel.IResourceBuilder WaitForCompletion(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder dependency, int exitCode = 0) where T : ApplicationModel.IResourceWithWaitSupport { throw null; } - [AspireExport("waitForStartWithBehavior", Description = "Waits for another resource to start with specific behavior")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal waitForStart dispatcher export.")] public static ApplicationModel.IResourceBuilder WaitForStart(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder dependency, ApplicationModel.WaitBehavior waitBehavior) where T : ApplicationModel.IResourceWithWaitSupport { throw null; } - [AspireExport("waitForResourceStart", MethodName = "waitForStart", Description = "Waits for another resource to start")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal waitForStart dispatcher export.")] public static ApplicationModel.IResourceBuilder WaitForStart(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder dependency) where T : ApplicationModel.IResourceWithWaitSupport { throw null; } @@ -1074,7 +1100,7 @@ public static ApplicationModel.IResourceBuilder WaitForStart(this Applicat public static ApplicationModel.IResourceBuilder WithArgs(this ApplicationModel.IResourceBuilder builder, System.Action callback) where T : ApplicationModel.IResourceWithArgs { throw null; } - [AspireExport("withArgsCallbackAsync", Description = "Sets command-line arguments via async callback")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the synchronous Action<> overload via withArgsCallback.")] public static ApplicationModel.IResourceBuilder WithArgs(this ApplicationModel.IResourceBuilder builder, System.Func callback) where T : ApplicationModel.IResourceWithArgs { throw null; } @@ -1082,7 +1108,7 @@ public static ApplicationModel.IResourceBuilder WithArgs(this ApplicationM public static ApplicationModel.IResourceBuilder WithArgs(this ApplicationModel.IResourceBuilder builder, params object[] args) where T : ApplicationModel.IResourceWithArgs { throw null; } - [AspireExport("withArgs", Description = "Adds arguments")] + [AspireExport(Description = "Adds arguments")] public static ApplicationModel.IResourceBuilder WithArgs(this ApplicationModel.IResourceBuilder builder, params string[] args) where T : ApplicationModel.IResourceWithArgs { throw null; } @@ -1094,7 +1120,7 @@ public static ApplicationModel.IResourceBuilder WithCertificateAuthor public static ApplicationModel.IResourceBuilder WithCertificateTrustConfiguration(this ApplicationModel.IResourceBuilder builder, System.Func callback) where TResource : ApplicationModel.IResourceWithArgs, ApplicationModel.IResourceWithEnvironment { throw null; } - [AspireExport("withCertificateTrustScope", Description = "Sets the certificate trust scope")] + [AspireExport(Description = "Sets the certificate trust scope")] public static ApplicationModel.IResourceBuilder WithCertificateTrustScope(this ApplicationModel.IResourceBuilder builder, ApplicationModel.CertificateTrustScope scope) where TResource : ApplicationModel.IResourceWithEnvironment, ApplicationModel.IResourceWithArgs { throw null; } @@ -1106,7 +1132,7 @@ public static ApplicationModel.IResourceBuilder WithChildRelationship(this public static ApplicationModel.IResourceBuilder WithChildRelationship(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder child) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withCommand", Description = "Adds a resource command")] + [AspireExport(Description = "Adds a resource command")] public static ApplicationModel.IResourceBuilder WithCommand(this ApplicationModel.IResourceBuilder builder, string name, string displayName, System.Func> executeCommand, ApplicationModel.CommandOptions? commandOptions = null) where T : ApplicationModel.IResource { throw null; } @@ -1130,7 +1156,7 @@ public static ApplicationModel.IResourceBuilder WithConnectionProperty(thi public static ApplicationModel.IResourceBuilder WithConnectionStringRedirection(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceWithConnectionString resource) where T : ApplicationModel.IResourceWithConnectionString { throw null; } - [AspireExport("withContainerFilesSource", Description = "Sets the source directory for container files")] + [AspireExport(Description = "Sets the source directory for container files")] public static ApplicationModel.IResourceBuilder WithContainerFilesSource(this ApplicationModel.IResourceBuilder builder, string sourcePath) where T : IResourceWithContainerFiles { throw null; } @@ -1139,11 +1165,11 @@ public static ApplicationModel.IResourceBuilder WithContainerFilesSource(t public static ApplicationModel.IResourceBuilder WithDebugSupport(this ApplicationModel.IResourceBuilder builder, System.Func launchConfigurationProducer, string launchConfigurationType, System.Action? argsCallback = null) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withDeveloperCertificateTrust", Description = "Configures developer certificate trust")] + [AspireExport(Description = "Configures developer certificate trust")] public static ApplicationModel.IResourceBuilder WithDeveloperCertificateTrust(this ApplicationModel.IResourceBuilder builder, bool trust) where TResource : ApplicationModel.IResourceWithEnvironment, ApplicationModel.IResourceWithArgs { throw null; } - [AspireExport("withEndpoint", Description = "Adds a network endpoint")] + [AspireExport(Description = "Adds a network endpoint")] public static ApplicationModel.IResourceBuilder WithEndpoint(this ApplicationModel.IResourceBuilder builder, int? port = null, int? targetPort = null, string? scheme = null, string? name = null, string? env = null, bool isProxied = true, bool? isExternal = null, System.Net.Sockets.ProtocolType? protocol = null) where T : ApplicationModel.IResourceWithEndpoints { throw null; } @@ -1151,7 +1177,7 @@ public static ApplicationModel.IResourceBuilder WithEndpoint(this Applicat public static ApplicationModel.IResourceBuilder WithEndpoint(this ApplicationModel.IResourceBuilder builder, int? port, int? targetPort, string? scheme, string? name, string? env, bool isProxied, bool? isExternal) where T : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExportIgnore(Reason = "EndpointAnnotation has read-only properties AllocatedEndpointSnapshot and AllAllocatedEndpoints that are not ATS-compatible. Callback-free variant is exported.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withEndpointCallback export, which exposes EndpointUpdateContext instead of EndpointAnnotation.")] public static ApplicationModel.IResourceBuilder WithEndpoint(this ApplicationModel.IResourceBuilder builder, string endpointName, System.Action callback, bool createIfNotExists = true) where T : ApplicationModel.IResourceWithEndpoints { throw null; } @@ -1163,15 +1189,19 @@ public static ApplicationModel.IResourceBuilder WithEnvironment(this Appli public static ApplicationModel.IResourceBuilder WithEnvironment(this ApplicationModel.IResourceBuilder builder, System.Func callback) where T : ApplicationModel.IResourceWithEnvironment { throw null; } - [AspireExport("withEnvironmentEndpoint", Description = "Sets an environment variable from an endpoint reference")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withEnvironment dispatcher export.")] public static ApplicationModel.IResourceBuilder WithEnvironment(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.EndpointReference endpointReference) where T : ApplicationModel.IResourceWithEnvironment { throw null; } - [AspireExport("withEnvironmentConnectionString", Description = "Sets an environment variable from a connection string resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withEnvironment dispatcher export.")] + public static ApplicationModel.IResourceBuilder WithEnvironment(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.IExpressionValue value) + where T : ApplicationModel.IResourceWithEnvironment { throw null; } + + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withEnvironment dispatcher export.")] public static ApplicationModel.IResourceBuilder WithEnvironment(this ApplicationModel.IResourceBuilder builder, string envVarName, ApplicationModel.IResourceBuilder resource) where T : ApplicationModel.IResourceWithEnvironment { throw null; } - [AspireExport("withEnvironmentParameter", Description = "Sets an environment variable from a parameter resource")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withEnvironment dispatcher export.")] public static ApplicationModel.IResourceBuilder WithEnvironment(this ApplicationModel.IResourceBuilder builder, string name, ApplicationModel.IResourceBuilder parameter) where T : ApplicationModel.IResourceWithEnvironment { throw null; } @@ -1199,27 +1229,27 @@ public static ApplicationModel.IResourceBuilder WithEnvironment(this Appli public static ApplicationModel.IResourceBuilder WithEnvironment(this ApplicationModel.IResourceBuilder builder, string name, TValue value) where T : ApplicationModel.IResourceWithEnvironment where TValue : ApplicationModel.IValueProvider, ApplicationModel.IManifestExpressionProvider { throw null; } - [AspireExport("withExplicitStart", Description = "Prevents resource from starting automatically")] + [AspireExport(Description = "Prevents resource from starting automatically")] public static ApplicationModel.IResourceBuilder WithExplicitStart(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withExternalHttpEndpoints", Description = "Makes HTTP endpoints externally accessible")] + [AspireExport(Description = "Makes HTTP endpoints externally accessible")] public static ApplicationModel.IResourceBuilder WithExternalHttpEndpoints(this ApplicationModel.IResourceBuilder builder) where T : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExport("withHealthCheck", Description = "Adds a health check by key")] + [AspireExport(Description = "Adds a health check by key")] public static ApplicationModel.IResourceBuilder WithHealthCheck(this ApplicationModel.IResourceBuilder builder, string key) where T : ApplicationModel.IResource { throw null; } - [AspireExportIgnore(Reason = "Func delegate — not ATS-compatible.")] + [AspireExportIgnore(Reason = "Use the ATS-specific withHttpCommand export.")] public static ApplicationModel.IResourceBuilder WithHttpCommand(this ApplicationModel.IResourceBuilder builder, string path, string displayName, System.Func? endpointSelector, string? commandName = null, ApplicationModel.HttpCommandOptions? commandOptions = null) where TResource : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExportIgnore(Reason = "Func is not ATS-compatible.")] + [AspireExportIgnore(Reason = "Use the ATS-specific withHttpCommand export.")] public static ApplicationModel.IResourceBuilder WithHttpCommand(this ApplicationModel.IResourceBuilder builder, string path, string displayName, string? endpointName = null, string? commandName = null, ApplicationModel.HttpCommandOptions? commandOptions = null) where TResource : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExport("withHttpEndpoint", Description = "Adds an HTTP endpoint")] + [AspireExport(Description = "Adds an HTTP endpoint")] public static ApplicationModel.IResourceBuilder WithHttpEndpoint(this ApplicationModel.IResourceBuilder builder, int? port = null, int? targetPort = null, string? name = null, string? env = null, bool isProxied = true) where T : ApplicationModel.IResourceWithEndpoints { throw null; } @@ -1227,7 +1257,7 @@ public static ApplicationModel.IResourceBuilder WithHttpEndpoint(this Appl public static ApplicationModel.IResourceBuilder WithHttpHealthCheck(this ApplicationModel.IResourceBuilder builder, System.Func? endpointSelector, string? path = null, int? statusCode = null) where T : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExport("withHttpHealthCheck", Description = "Adds an HTTP health check")] + [AspireExport(Description = "Adds an HTTP health check")] public static ApplicationModel.IResourceBuilder WithHttpHealthCheck(this ApplicationModel.IResourceBuilder builder, string? path = null, int? statusCode = null, string? endpointName = null) where T : ApplicationModel.IResourceWithEndpoints { throw null; } @@ -1256,7 +1286,7 @@ public static ApplicationModel.IResourceBuilder WithHttpsCertificateC public static ApplicationModel.IResourceBuilder WithHttpsDeveloperCertificate(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder? password = null) where TResource : ApplicationModel.IResourceWithEnvironment, ApplicationModel.IResourceWithArgs { throw null; } - [AspireExport("withHttpsEndpoint", Description = "Adds an HTTPS endpoint")] + [AspireExport(Description = "Adds an HTTPS endpoint")] public static ApplicationModel.IResourceBuilder WithHttpsEndpoint(this ApplicationModel.IResourceBuilder builder, int? port = null, int? targetPort = null, string? name = null, string? env = null, bool isProxied = true) where T : ApplicationModel.IResourceWithEndpoints { throw null; } @@ -1264,17 +1294,17 @@ public static ApplicationModel.IResourceBuilder WithHttpsEndpoint(this App public static ApplicationModel.IResourceBuilder WithHttpsHealthCheck(this ApplicationModel.IResourceBuilder builder, string? path = null, int? statusCode = null, string? endpointName = null) where T : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExport("withIconName", Description = "Sets the icon for the resource")] + [AspireExport(Description = "Sets the icon for the resource")] public static ApplicationModel.IResourceBuilder WithIconName(this ApplicationModel.IResourceBuilder builder, string iconName, ApplicationModel.IconVariant iconVariant = ApplicationModel.IconVariant.Filled) where T : ApplicationModel.IResource { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES003", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] - [AspireExportIgnore(Reason = "ContainerImagePushOptionsCallbackContext exposes IResource — not usable from polyglot hosts.")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the async callback overload.")] public static ApplicationModel.IResourceBuilder WithImagePushOptions(this ApplicationModel.IResourceBuilder builder, System.Action callback) where T : ApplicationModel.IComputeResource { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES003", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] - [AspireExportIgnore(Reason = "ContainerImagePushOptionsCallbackContext exposes IResource — not usable from polyglot hosts.")] + [AspireExport(Description = "Sets image push options via callback")] public static ApplicationModel.IResourceBuilder WithImagePushOptions(this ApplicationModel.IResourceBuilder builder, System.Func callback) where T : ApplicationModel.IComputeResource { throw null; } @@ -1287,7 +1317,7 @@ public static ApplicationModel.IResourceBuilder WithManifestPublishingCallbac where T : ApplicationModel.IResource { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECERTIFICATES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] - [AspireExport("withoutHttpsCertificate", Description = "Removes HTTPS certificate configuration")] + [AspireExport(Description = "Removes HTTPS certificate configuration")] public static ApplicationModel.IResourceBuilder WithoutHttpsCertificate(this ApplicationModel.IResourceBuilder builder) where TResource : ApplicationModel.IResourceWithEnvironment, ApplicationModel.IResourceWithArgs { throw null; } @@ -1299,7 +1329,7 @@ public static ApplicationModel.IResourceBuilder WithParentRelationship(thi public static ApplicationModel.IResourceBuilder WithParentRelationship(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder parent) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withReferenceEndpoint", Description = "Adds a reference to an endpoint")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the generic withReference dispatcher export.")] public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder builder, ApplicationModel.EndpointReference endpointReference) where TDestination : ApplicationModel.IResourceWithEnvironment { throw null; } @@ -1307,7 +1337,7 @@ public static ApplicationModel.IResourceBuilder WithReference WithReference(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder source, string? connectionName = null, bool optional = false) where TDestination : ApplicationModel.IResourceWithEnvironment { throw null; } - [AspireExport("withReferenceExternalService", Description = "Adds a reference to an external service")] + [AspireExportIgnore(Reason = "Polyglot app hosts can use the generic withReference dispatcher with an ExternalServiceResource builder.")] public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder externalService) where TDestination : ApplicationModel.IResourceWithEnvironment { throw null; } @@ -1319,7 +1349,7 @@ public static ApplicationModel.IResourceBuilder WithReference WithReference(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder source) where TDestination : ApplicationModel.IResourceWithEnvironment { throw null; } - [AspireExport("withReferenceUri", Description = "Adds a reference to a URI")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the generic withReference dispatcher export.")] public static ApplicationModel.IResourceBuilder WithReference(this ApplicationModel.IResourceBuilder builder, string name, System.Uri uri) where TDestination : ApplicationModel.IResourceWithEnvironment { throw null; } @@ -1348,16 +1378,16 @@ public static ApplicationModel.IResourceBuilder WithRelationship(this Appl where T : ApplicationModel.IResource { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES003", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] - [AspireExport("withRemoteImageName", Description = "Sets the remote image name for publishing")] + [AspireExport(Description = "Sets the remote image name for publishing")] public static ApplicationModel.IResourceBuilder WithRemoteImageName(this ApplicationModel.IResourceBuilder builder, string remoteImageName) where T : ApplicationModel.IComputeResource { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES003", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] - [AspireExport("withRemoteImageTag", Description = "Sets the remote image tag for publishing")] + [AspireExport(Description = "Sets the remote image tag for publishing")] public static ApplicationModel.IResourceBuilder WithRemoteImageTag(this ApplicationModel.IResourceBuilder builder, string remoteImageTag) where T : ApplicationModel.IComputeResource { throw null; } - [AspireExport("withUrlExpression", Description = "Adds a URL using a reference expression")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withUrl dispatcher export.")] public static ApplicationModel.IResourceBuilder WithUrl(this ApplicationModel.IResourceBuilder builder, ApplicationModel.ReferenceExpression url, string? displayText = null) where T : ApplicationModel.IResource { throw null; } @@ -1365,23 +1395,23 @@ public static ApplicationModel.IResourceBuilder WithUrl(this ApplicationMo public static ApplicationModel.IResourceBuilder WithUrl(this ApplicationModel.IResourceBuilder builder, in ApplicationModel.ReferenceExpression.ExpressionInterpolatedStringHandler url, string? displayText = null) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withUrl", Description = "Adds or modifies displayed URLs")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the internal withUrl dispatcher export.")] public static ApplicationModel.IResourceBuilder WithUrl(this ApplicationModel.IResourceBuilder builder, string url, string? displayText = null) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withUrlForEndpoint", Description = "Customizes the URL for a specific endpoint via callback")] + [AspireExport(Description = "Customizes the URL for a specific endpoint via callback")] public static ApplicationModel.IResourceBuilder WithUrlForEndpoint(this ApplicationModel.IResourceBuilder builder, string endpointName, System.Action callback) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withUrlForEndpointFactory", Description = "Adds a URL for a specific endpoint via factory callback")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the Action overload for withUrlForEndpoint.")] public static ApplicationModel.IResourceBuilder WithUrlForEndpoint(this ApplicationModel.IResourceBuilder builder, string endpointName, System.Func callback) where T : ApplicationModel.IResourceWithEndpoints { throw null; } - [AspireExport("withUrlsCallback", Description = "Customizes displayed URLs via callback")] + [AspireExport(Description = "Customizes displayed URLs via callback")] public static ApplicationModel.IResourceBuilder WithUrls(this ApplicationModel.IResourceBuilder builder, System.Action callback) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withUrlsCallbackAsync", Description = "Customizes displayed URLs via async callback")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the synchronous Action<> overload via withUrlsCallback.")] public static ApplicationModel.IResourceBuilder WithUrls(this ApplicationModel.IResourceBuilder builder, System.Func callback) where T : ApplicationModel.IResource { throw null; } } @@ -1463,6 +1493,7 @@ public AllocatedEndpoint(EndpointAnnotation endpoint, string address, int port, public static partial class AspireStoreExtensions { + [AspireExport(Description = "Gets a deterministic file path for the specified file contents")] public static string GetFileNameWithContent(this IAspireStore aspireStore, string filenameTemplate, string sourceFilename) { throw null; } } @@ -1553,6 +1584,7 @@ public sealed partial class CertificateTrustConfigurationCallbackAnnotationConte } [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECERTIFICATES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireDto] public partial class CertificateTrustExecutionConfigurationContext { public required ReferenceExpression CertificateBundlePath { get { throw null; } init { } } @@ -1591,7 +1623,7 @@ public CommandLineArgsCallbackAnnotation(System.Func Callback { get { throw null; } } } - [AspireExport(ExposeProperties = true)] + [AspireExport] public sealed partial class CommandLineArgsCallbackContext { public CommandLineArgsCallbackContext(System.Collections.Generic.IList args, IResource resource, System.Threading.CancellationToken cancellationToken = default) { } @@ -1606,6 +1638,7 @@ public CommandLineArgsCallbackContext(System.Collections.Generic.IList a public Microsoft.Extensions.Logging.ILogger Logger { get { throw null; } init { } } + [AspireExport(Description = "Gets the resource associated with this callback")] public IResource Resource { get { throw null; } } } @@ -1627,15 +1660,40 @@ public partial class CommandOptions public System.Func? UpdateState { get { throw null; } set { } } } + [AspireDto] + public sealed partial class CommandResultData + { + public bool DisplayImmediately { get { throw null; } init { } } + + public CommandResultFormat Format { get { throw null; } init { } } + + public required string Value { get { throw null; } init { } } + } + + public enum CommandResultFormat + { + Text = 0, + Json = 1, + Markdown = 2 + } + public static partial class CommandResults { public static ExecuteCommandResult Canceled() { throw null; } public static ExecuteCommandResult Failure(System.Exception exception) { throw null; } + public static ExecuteCommandResult Failure(string errorMessage, CommandResultData value) { throw null; } + + public static ExecuteCommandResult Failure(string errorMessage, string result, CommandResultFormat resultFormat = CommandResultFormat.Text) { throw null; } + public static ExecuteCommandResult Failure(string? errorMessage = null) { throw null; } public static ExecuteCommandResult Success() { throw null; } + + public static ExecuteCommandResult Success(string message, CommandResultData value) { throw null; } + + public static ExecuteCommandResult Success(string message, string result, CommandResultFormat resultFormat = CommandResultFormat.Text) { throw null; } } public sealed partial class ConnectionPropertyAnnotation : IResourceAnnotation @@ -1664,7 +1722,7 @@ public ConnectionStringRedirectAnnotation(IResourceWithConnectionString resource public IResourceWithConnectionString Resource { get { throw null; } } } - public partial class ConnectionStringReference : IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class ConnectionStringReference : IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public ConnectionStringReference(IResourceWithConnectionString resource, bool optional) { } @@ -1826,6 +1884,7 @@ public sealed partial class ContainerImagePullPolicyAnnotation : IResourceAnnota } [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES003", UrlFormat = "https://aka.ms/aspire/diagnostics#{0}")] + [AspireExport(ExposeProperties = true)] public sealed partial class ContainerImagePushOptions { public string? RemoteImageName { get { throw null; } set { } } @@ -1846,6 +1905,7 @@ public ContainerImagePushOptionsCallbackAnnotation(System.Func References { get { throw null; } } public IResource Resource { get { throw null; } } @@ -1928,6 +1989,7 @@ public partial class ContainerPortReference : IManifestExpressionProvider, IValu { public ContainerPortReference(IResource resource) { } + [AspireExportIgnore(Reason = "Reference enumeration is not needed in the ATS surface for container port provenance.")] public System.Collections.Generic.IEnumerable References { get { throw null; } } public IResource Resource { get { throw null; } } @@ -2036,6 +2098,11 @@ public sealed partial record CustomResourceSnapshot() public System.Collections.Immutable.ImmutableArray Volumes { get { throw null; } init { } } } + public static partial class CustomResourceSnapshotExtensions + { + public static CustomResourceSnapshot WithHealthReports(this CustomResourceSnapshot snapshot, System.Collections.Immutable.ImmutableArray healthReports) { throw null; } + } + [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, LaunchProfileName = {LaunchProfileName}")] public sealed partial class DefaultLaunchProfileAnnotation : IResourceAnnotation { @@ -2140,6 +2207,7 @@ public DockerfileBuilderCallbackAnnotation(System.Func callback) { } } + [AspireExport(ExposeProperties = true)] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public partial class DockerfileBuilderCallbackContext { @@ -2281,9 +2349,9 @@ public enum EndpointProperty TlsEnabled = 7 } - [AspireExport(ExposeProperties = true)] + [AspireExport(ExposeProperties = true, ExposeMethods = true)] [System.Diagnostics.DebuggerDisplay("Resource = {Resource.Name}, EndpointName = {EndpointName}, IsAllocated = {IsAllocated}")] - public sealed partial class EndpointReference : IManifestExpressionProvider, IValueProvider, IValueWithReferences + public sealed partial class EndpointReference : IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public EndpointReference(IResourceWithEndpoints owner, EndpointAnnotation endpoint, NetworkIdentifier? contextNetworkID) { } @@ -2317,6 +2385,8 @@ public EndpointReference(IResourceWithEndpoints owner, string endpointName) { } public bool IsHttps { get { throw null; } } + public bool IsHttpSchemeNamedEndpoint { get { throw null; } } + public int Port { get { throw null; } } public IResourceWithEndpoints Resource { get { throw null; } } @@ -2332,17 +2402,19 @@ public EndpointReference(IResourceWithEndpoints owner, string endpointName) { } [AspireExport(Description = "Gets a conditional expression that resolves to the enabledValue when TLS is enabled on the endpoint, or to the disabledValue otherwise.")] public ReferenceExpression GetTlsValue(ReferenceExpression enabledValue, ReferenceExpression disabledValue) { throw null; } + [AspireExportIgnore] public System.Threading.Tasks.ValueTask GetValueAsync(ValueProviderContext context, System.Threading.CancellationToken cancellationToken = default) { throw null; } - [AspireExport("getValueAsync", Description = "Gets the URL of the endpoint asynchronously")] + [AspireExport(Description = "Gets the URL of the endpoint asynchronously")] public System.Threading.Tasks.ValueTask GetValueAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } + [AspireExport(Description = "Gets the specified property expression of the endpoint")] public EndpointReferenceExpression Property(EndpointProperty property) { throw null; } } [AspireExport(ExposeProperties = true)] [System.Diagnostics.DebuggerDisplay("EndpointExpression = {ValueExpression}, Property = {Property}, Endpoint = {Endpoint.EndpointName}")] - public partial class EndpointReferenceExpression : IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class EndpointReferenceExpression : IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { public EndpointReferenceExpression(EndpointReference endpointReference, EndpointProperty property) { } @@ -2373,7 +2445,7 @@ public EnvironmentCallbackAnnotation(string name, System.Func callback) public System.Func Callback { get { throw null; } } } - [AspireExport(ExposeProperties = true)] + [AspireExport] public partial class EnvironmentCallbackContext { public EnvironmentCallbackContext(DistributedApplicationExecutionContext executionContext, IResource resource, System.Collections.Generic.Dictionary? environmentVariables = null, System.Threading.CancellationToken cancellationToken = default) { } @@ -2385,10 +2457,12 @@ public EnvironmentCallbackContext(DistributedApplicationExecutionContext executi [AspireUnion(new[] { typeof(string), typeof(ReferenceExpression) })] public System.Collections.Generic.Dictionary EnvironmentVariables { get { throw null; } } + [AspireExport(Description = "Gets the execution context for this callback invocation")] public DistributedApplicationExecutionContext ExecutionContext { get { throw null; } } public Microsoft.Extensions.Logging.ILogger Logger { get { throw null; } set { } } + [AspireExport(Description = "Gets the resource associated with this callback")] public IResource Resource { get { throw null; } } } @@ -2425,6 +2499,8 @@ public sealed partial class ExecuteCommandContext { public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } } + public required Microsoft.Extensions.Logging.ILogger Logger { get { throw null; } init { } } + public required string ResourceName { get { throw null; } init { } } public required System.IServiceProvider ServiceProvider { get { throw null; } init { } } @@ -2435,8 +2511,13 @@ public sealed partial class ExecuteCommandResult { public bool Canceled { get { throw null; } init { } } + public CommandResultData? Data { get { throw null; } init { } } + + [System.Obsolete("Use Message instead.")] public string? ErrorMessage { get { throw null; } init { } } + public string? Message { get { throw null; } init { } } + public required bool Success { get { throw null; } init { } } } @@ -2453,19 +2534,24 @@ internal ExecutionConfigurationBuilder() { } public static partial class ExecutionConfigurationBuilderExtensions { + [AspireExport(Description = "Adds an arguments configuration gatherer")] public static IExecutionConfigurationBuilder WithArgumentsConfig(this IExecutionConfigurationBuilder builder) { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECERTIFICATES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireExport(Description = "Adds a certificate trust configuration gatherer")] public static IExecutionConfigurationBuilder WithCertificateTrustConfig(this IExecutionConfigurationBuilder builder, System.Func configContextFactory) { throw null; } + [AspireExport(Description = "Adds an environment variables configuration gatherer")] public static IExecutionConfigurationBuilder WithEnvironmentVariablesConfig(this IExecutionConfigurationBuilder builder) { throw null; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECERTIFICATES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireExportIgnore(Reason = "X509Certificate2 callback input is not ATS-compatible. Use the ATS-specific withHttpsCertificateConfig export instead.")] public static IExecutionConfigurationBuilder WithHttpsCertificateConfig(this IExecutionConfigurationBuilder builder, System.Func configContextFactory) { throw null; } } public static partial class ExecutionConfigurationResultExtensions { + [AspireExportIgnore(Reason = "Generic out-parameter helper — use getCertificateTrustData or getHttpsCertificateData instead.")] public static bool TryGetAdditionalData(this IExecutionConfigurationResult configuration, out T? additionalData) where T : IExecutionConfigurationData { throw null; } } @@ -2515,7 +2601,7 @@ public sealed partial record HealthReportSnapshot(string Name, Microsoft.Extensi public System.DateTime? LastRunAt { get { throw null; } init { } } } - public partial record HostUrl(string Url) : IValueProvider, IManifestExpressionProvider + public partial record HostUrl(string Url) : IExpressionValue, IValueProvider, IManifestExpressionProvider { string IManifestExpressionProvider.ValueExpression { get { throw null; } } @@ -2535,6 +2621,8 @@ public partial class HttpCommandOptions : CommandOptions public System.Net.Http.HttpMethod? Method { get { throw null; } set { } } public System.Func? PrepareRequest { get { throw null; } set { } } + + public HttpCommandResultMode ResultMode { get { throw null; } set { } } } public sealed partial class HttpCommandRequestContext @@ -2567,6 +2655,14 @@ public sealed partial class HttpCommandResultContext public required System.IServiceProvider ServiceProvider { get { throw null; } init { } } } + public enum HttpCommandResultMode + { + None = 0, + Auto = 1, + Json = 2, + Text = 3 + } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECERTIFICATES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public sealed partial class HttpsCertificateAnnotation : IResourceAnnotation { @@ -2608,6 +2704,7 @@ public sealed partial class HttpsCertificateConfigurationCallbackAnnotationConte } [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECERTIFICATES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + [AspireDto] public partial class HttpsCertificateExecutionConfigurationContext { public required ReferenceExpression CertificatePath { get { throw null; } init { } } @@ -2654,6 +2751,8 @@ public partial interface IAspireStore public partial interface IComputeEnvironmentResource : IResource { + [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMPUTE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + ReferenceExpression GetEndpointPropertyExpression(EndpointReferenceExpression endpointReferenceExpression); [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMPUTE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] ReferenceExpression GetHostAddressExpression(EndpointReference endpointReference); } @@ -2722,6 +2821,11 @@ public partial interface IExecutionConfigurationResult System.Collections.Generic.IEnumerable References { get; } } + [AspireExport] + public partial interface IExpressionValue : IValueProvider, IManifestExpressionProvider + { + } + public enum ImagePullPolicy { Default = 0, @@ -2801,13 +2905,14 @@ IResourceBuilder WithAnnotation(ResourceAnnotationMutationBehavi public partial interface IResourceCollection : System.Collections.Generic.IList, System.Collections.Generic.ICollection, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable { + bool TryGetByName(string name, out IResource? resource); } public partial interface IResourceWithArgs : IResource { } - public partial interface IResourceWithConnectionString : IResource, IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial interface IResourceWithConnectionString : IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { string IManifestExpressionProvider.ValueExpression { get; } @@ -2919,6 +3024,7 @@ public static partial class KnownResourceStates public static readonly string Starting; public static readonly string Stopping; public static readonly System.Collections.Generic.IReadOnlyList TerminalStates; + public static readonly string ValueMissing; public static readonly string Waiting; } @@ -3024,6 +3130,22 @@ public McpServerEndpointAnnotation(System.Func Snapshot, NetworkIdentifier NetworkID) { @@ -3059,7 +3181,7 @@ public abstract partial class ParameterDefault public abstract void WriteToManifest(Publishing.ManifestPublishingContext context); } - public partial class ParameterResource : Resource, IManifestExpressionProvider, IValueProvider + public partial class ParameterResource : Resource, IExpressionValue, IValueProvider, IManifestExpressionProvider { public ParameterResource(string name, System.Func callback, bool secret = false) : base(default!) { } @@ -3157,7 +3279,7 @@ public enum ReferenceEnvironmentInjectionFlags [AspireExport] [System.Diagnostics.DebuggerDisplay("ReferenceExpression = {ValueExpression}, Providers = {ValueProviders.Count}")] - public partial class ReferenceExpression : IManifestExpressionProvider, IValueProvider, IValueWithReferences + public partial class ReferenceExpression : IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences { internal ReferenceExpression() { } @@ -3190,7 +3312,7 @@ internal ReferenceExpression() { } public System.Threading.Tasks.ValueTask GetValueAsync(ValueProviderContext context, System.Threading.CancellationToken cancellationToken) { throw null; } - [AspireExport("getValue", Description = "Gets the resolved string value of the reference expression asynchronously")] + [AspireExport(Description = "Gets the resolved string value of the reference expression asynchronously")] public System.Threading.Tasks.ValueTask GetValueAsync(System.Threading.CancellationToken cancellationToken) { throw null; } [System.Runtime.CompilerServices.InterpolatedStringHandler] @@ -3233,7 +3355,7 @@ public void Append(in ReferenceExpressionBuilderInterpolatedStringHandler handle [System.Obsolete("ReferenceExpression instances can't be used in interpolated string with a custom format. Duplicate the inner expression in-place.", true)] public void AppendFormatted(ReferenceExpression valueProvider, string format) { } - [AspireExport("appendFormatted", Description = "Appends a formatted string value to the reference expression")] + [AspireExport(Description = "Appends a formatted string value to the reference expression")] public void AppendFormatted(string? value, string? format = null) { } public void AppendFormatted(string? value) { } @@ -3244,13 +3366,13 @@ public void AppendFormatted(T valueProvider, string? format) public void AppendFormatted(T valueProvider) where T : IValueProvider, IManifestExpressionProvider { } - [AspireExport("appendLiteral", Description = "Appends a literal string to the reference expression")] + [AspireExport(Description = "Appends a literal string to the reference expression")] public void AppendLiteral(string value) { } - [AspireExport("appendValueProvider", Description = "Appends a value provider to the reference expression")] + [AspireExport(Description = "Appends a value provider to the reference expression")] public void AppendValueProvider(object valueProvider, string? format = null) { } - [AspireExport("build", Description = "Builds the reference expression")] + [AspireExport(Description = "Builds the reference expression")] public ReferenceExpression Build() { throw null; } [System.Runtime.CompilerServices.InterpolatedStringHandler] @@ -3445,6 +3567,13 @@ public enum ResourceDependencyDiscoveryMode DirectOnly = 1 } + public sealed partial class ResourceDependencyDiscoveryOptions + { + public bool CacheAnnotationCallbackResults { get { throw null; } init { } } + + public ResourceDependencyDiscoveryMode DiscoveryMode { get { throw null; } init { } } + } + [AspireExport(ExposeProperties = true)] public partial class ResourceEndpointsAllocatedEvent : Eventing.IDistributedApplicationResourceEvent, Eventing.IDistributedApplicationEvent { @@ -3498,6 +3627,9 @@ public static partial class ResourceExtensions [AspireExportIgnore(Reason = "Dependency discovery helper depends on execution context and is not part of the ATS surface.")] public static System.Threading.Tasks.Task> GetResourceDependenciesAsync(this IResource resource, DistributedApplicationExecutionContext executionContext, ResourceDependencyDiscoveryMode mode = ResourceDependencyDiscoveryMode.Recursive, System.Threading.CancellationToken cancellationToken = default) { throw null; } + [AspireExportIgnore(Reason = "Parameters and return type are not ATS-compatible — internal dependency discovery helper.")] + public static System.Threading.Tasks.Task> GetResourceDependenciesAsync(this IResource resource, DistributedApplicationExecutionContext executionContext, ResourceDependencyDiscoveryOptions options, System.Threading.CancellationToken cancellationToken = default) { throw null; } + [AspireExportIgnore(Reason = "Generic annotation inspection helper — not part of the ATS surface.")] public static bool HasAnnotationIncludingAncestorsOfType(this IResource resource) where T : IResourceAnnotation { throw null; } @@ -3609,7 +3741,7 @@ public partial class ResourceNotificationService : System.IDisposable { public ResourceNotificationService(Microsoft.Extensions.Logging.ILogger logger, Microsoft.Extensions.Hosting.IHostApplicationLifetime hostApplicationLifetime, System.IServiceProvider serviceProvider, ResourceLoggerService resourceLoggerService) { } - [System.Obsolete("ResourceNotificationService now requires an IServiceProvider and ResourceLoggerService.\r\nUse the constructor that accepts an ILogger, IHostApplicationLifetime, IServiceProvider and ResourceLoggerService.\r\nThis constructor will be removed in the next major version of Aspire.")] + [System.Obsolete("ResourceNotificationService now requires an IServiceProvider and ResourceLoggerService.\nUse the constructor that accepts an ILogger, IHostApplicationLifetime, IServiceProvider and ResourceLoggerService.\nThis constructor will be removed in the next major version of Aspire.")] public ResourceNotificationService(Microsoft.Extensions.Logging.ILogger logger, Microsoft.Extensions.Hosting.IHostApplicationLifetime hostApplicationLifetime) { } public void Dispose() { } @@ -3714,23 +3846,26 @@ public ResourceUrlsCallbackAnnotation(System.Func Callback { get { throw null; } } } - [AspireExport(ExposeProperties = true)] + [AspireExport] public partial class ResourceUrlsCallbackContext { public ResourceUrlsCallbackContext(DistributedApplicationExecutionContext executionContext, IResource resource, System.Collections.Generic.List? urls = null, System.Threading.CancellationToken cancellationToken = default) { } public System.Threading.CancellationToken CancellationToken { get { throw null; } } + [AspireExport(Description = "Gets the execution context for this callback invocation")] public DistributedApplicationExecutionContext ExecutionContext { get { throw null; } } public Microsoft.Extensions.Logging.ILogger Logger { get { throw null; } set { } } + [AspireExport(Description = "Gets the resource associated with these URLs")] public IResource Resource { get { throw null; } } public System.Collections.Generic.List Urls { get { throw null; } } public EndpointReference? GetEndpoint(string name, NetworkIdentifier contextNetworkID) { throw null; } + [AspireExport(Description = "Gets an endpoint reference from the associated resource")] public EndpointReference? GetEndpoint(string name) { throw null; } } @@ -3818,13 +3953,16 @@ namespace Aspire.Hosting.ApplicationModel.Docker { public static partial class ContainerFilesExtensions { + [AspireExportIgnore(Reason = "Polyglot-facing wrappers are exported from DockerfileBuilderExports with a curated signature.")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static DockerfileStage AddContainerFiles(this DockerfileStage stage, IResource resource, string rootDestinationPath, Microsoft.Extensions.Logging.ILogger? logger) { throw null; } + [AspireExportIgnore(Reason = "Polyglot-facing wrappers are exported from DockerfileBuilderExports with a curated signature.")] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static DockerfileBuilder AddContainerFilesStages(this DockerfileBuilder builder, IResource resource, Microsoft.Extensions.Logging.ILogger? logger) { throw null; } } + [AspireExport] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public partial class DockerfileBuilder { @@ -3845,6 +3983,7 @@ public partial class DockerfileBuilder public System.Threading.Tasks.Task WriteAsync(System.IO.StreamWriter writer, System.Threading.CancellationToken cancellationToken = default) { throw null; } } + [AspireExport] [System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOCKERFILEBUILDER001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public partial class DockerfileStage : DockerfileStatement { @@ -3989,9 +4128,11 @@ namespace Aspire.Hosting.Lifecycle { public static partial class EventingSubscriberServiceCollectionExtensions { + [AspireExportIgnore(Reason = "IServiceCollection is not exported to ATS, and generic service registration is not ATS-compatible. Use IDistributedApplicationBuilder.addEventingSubscriber instead.")] public static void AddEventingSubscriber(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) where T : class, IDistributedApplicationEventingSubscriber { } + [AspireExportIgnore(Reason = "IServiceCollection is not exported to ATS, and generic service registration is not ATS-compatible. Use IDistributedApplicationBuilder.tryAddEventingSubscriber instead.")] public static void TryAddEventingSubscriber(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) where T : class, IDistributedApplicationEventingSubscriber { } } @@ -4012,18 +4153,22 @@ public partial interface IDistributedApplicationLifecycleHook public static partial class LifecycleHookServiceCollectionExtensions { [System.Obsolete("Use EventingSubscriberServiceCollectionExtensions.AddEventingSubscriber instead.")] + [AspireExportIgnore(Reason = "IServiceCollection is not exported to ATS, and IServiceProvider factory registration is not ATS-compatible. Use IDistributedApplicationBuilder.addEventingSubscriber instead.")] public static void AddLifecycleHook(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Func implementationFactory) where T : class, IDistributedApplicationLifecycleHook { } [System.Obsolete("Use EventingSubscriberServiceCollectionExtensions.AddEventingSubscriber instead.")] + [AspireExportIgnore(Reason = "IServiceCollection is not exported to ATS, and generic lifecycle hook registration is not ATS-compatible. Use IDistributedApplicationBuilder.addEventingSubscriber instead.")] public static void AddLifecycleHook(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) where T : class, IDistributedApplicationLifecycleHook { } [System.Obsolete("Use EventingSubscriberServiceCollectionExtensions.TryAddEventingSubscriber instead.")] + [AspireExportIgnore(Reason = "IServiceCollection is not exported to ATS, and IServiceProvider factory registration is not ATS-compatible. Use IDistributedApplicationBuilder.tryAddEventingSubscriber instead.")] public static void TryAddLifecycleHook(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Func implementationFactory) where T : class, IDistributedApplicationLifecycleHook { } [System.Obsolete("Use EventingSubscriberServiceCollectionExtensions.TryAddEventingSubscriber instead.")] + [AspireExportIgnore(Reason = "IServiceCollection is not exported to ATS, and generic lifecycle hook registration is not ATS-compatible. Use IDistributedApplicationBuilder.tryAddEventingSubscriber instead.")] public static void TryAddLifecycleHook(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) where T : class, IDistributedApplicationLifecycleHook { } } @@ -4054,12 +4199,20 @@ public DeploymentStateSection(string sectionName, System.Text.Json.Nodes.JsonObj public void SetValue(string value) { } } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public static partial class DistributedApplicationPipelineExtensions + { + [AspireExport(Description = "Disables publish and deploy validation for unconsumed build-only containers.")] + public static IDistributedApplicationPipeline DisableBuildOnlyContainerValidation(this IDistributedApplicationPipeline pipeline) { throw null; } + } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public partial interface IDeploymentStateManager { string? StateFilePath { get; } System.Threading.Tasks.Task AcquireSectionAsync(string sectionName, System.Threading.CancellationToken cancellationToken = default); + System.Threading.Tasks.Task ClearAllStateAsync(System.Threading.CancellationToken cancellationToken = default); System.Threading.Tasks.Task DeleteSectionAsync(DeploymentStateSection section, System.Threading.CancellationToken cancellationToken = default); System.Threading.Tasks.Task SaveSectionAsync(DeploymentStateSection section, System.Threading.CancellationToken cancellationToken = default); } @@ -4079,6 +4232,7 @@ public partial interface IPipelineActivityReporter System.Threading.Tasks.Task CompletePublishAsync(PublishCompletionOptions? options = null, System.Threading.CancellationToken cancellationToken = default); [System.Obsolete("Use CompletePublishAsync(PublishCompletionOptions?, CancellationToken) instead.")] System.Threading.Tasks.Task CompletePublishAsync(string? completionMessage = null, CompletionState? completionState = null, System.Threading.CancellationToken cancellationToken = default); + System.Threading.Tasks.Task CreateStepAsync(string title, string? parentStepId, int hierarchyLevel, System.Threading.CancellationToken cancellationToken = default); System.Threading.Tasks.Task CreateStepAsync(string title, System.Threading.CancellationToken cancellationToken = default); } @@ -4145,7 +4299,7 @@ public PipelineConfigurationAnnotation(System.Func Steps { get { throw null; } init { } } - [AspireExportIgnore(Reason = "IResource parameters on callback context methods are not ATS-compatible. Use Steps or the tag-based overload instead.")] + [AspireExportIgnore(Reason = "IResource parameters on callback context methods are not ATS-compatible. Use pipeline helpers instead.")] public System.Collections.Generic.IEnumerable GetSteps(ApplicationModel.IResource resource, string tag) { throw null; } - [AspireExportIgnore(Reason = "IResource parameters on callback context methods are not ATS-compatible. Use Steps or the tag-based overload instead.")] + [AspireExportIgnore(Reason = "IResource parameters on callback context methods are not ATS-compatible. Use pipeline helpers instead.")] public System.Collections.Generic.IEnumerable GetSteps(ApplicationModel.IResource resource) { throw null; } - [AspireExport("getStepsByTag", Description = "Gets pipeline steps with the specified tag")] + [AspireExport(Description = "Gets pipeline steps with the specified tag")] public System.Collections.Generic.IEnumerable GetSteps(string tag) { throw null; } } @@ -4192,12 +4346,14 @@ public partial class PipelineOptions public string? OutputPath { get { throw null; } set { } } + public bool SkipConfirmation { get { throw null; } set { } } + public string? Step { get { throw null; } set { } } } [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] [System.Diagnostics.DebuggerDisplay("{DebuggerToString(),nq}")] - [AspireExport(ExposeProperties = true)] + [AspireExport] public partial class PipelineStep { public required System.Func Action { get { throw null; } init { } } @@ -4216,12 +4372,12 @@ public partial class PipelineStep public void DependsOn(PipelineStep step) { } - [AspireExport("dependsOn", Description = "Adds a dependency on another step by name")] + [AspireExport(Description = "Adds a dependency on another step by name")] public void DependsOn(string stepName) { } public void RequiredBy(PipelineStep step) { } - [AspireExport("requiredBy", Description = "Specifies that another step requires this step by name")] + [AspireExport(Description = "Specifies that another step requires this step by name")] public void RequiredBy(string stepName) { } } @@ -4263,16 +4419,22 @@ public sealed partial class PipelineStepContext [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static partial class PipelineStepExtensions { + [AspireExportIgnore(Reason = "Use PipelineStep.dependsOn on each step in the collection, or mutate PipelineStep.dependsOnSteps directly.")] public static System.Collections.Generic.IEnumerable DependsOn(this System.Collections.Generic.IEnumerable steps, PipelineStep? step) { throw null; } + [AspireExportIgnore(Reason = "Use PipelineStep.dependsOn on each step in the collection, or mutate PipelineStep.dependsOnSteps directly.")] public static System.Collections.Generic.IEnumerable DependsOn(this System.Collections.Generic.IEnumerable steps, System.Collections.Generic.IEnumerable targetSteps) { throw null; } + [AspireExportIgnore(Reason = "Use PipelineStep.dependsOn on each step in the collection, or mutate PipelineStep.dependsOnSteps directly.")] public static System.Collections.Generic.IEnumerable DependsOn(this System.Collections.Generic.IEnumerable steps, string stepName) { throw null; } + [AspireExportIgnore(Reason = "Use PipelineStep.requiredBy on each step in the collection, or mutate PipelineStep.requiredBySteps directly.")] public static System.Collections.Generic.IEnumerable RequiredBy(this System.Collections.Generic.IEnumerable steps, PipelineStep? step) { throw null; } + [AspireExportIgnore(Reason = "Use PipelineStep.requiredBy on each step in the collection, or mutate PipelineStep.requiredBySteps directly.")] public static System.Collections.Generic.IEnumerable RequiredBy(this System.Collections.Generic.IEnumerable steps, System.Collections.Generic.IEnumerable targetSteps) { throw null; } + [AspireExportIgnore(Reason = "Use PipelineStep.requiredBy on each step in the collection, or mutate PipelineStep.requiredBySteps directly.")] public static System.Collections.Generic.IEnumerable RequiredBy(this System.Collections.Generic.IEnumerable steps, string stepName) { throw null; } } @@ -4288,11 +4450,11 @@ public partial class PipelineStepFactoryContext [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static partial class PipelineStepFactoryExtensions { - [AspireExport("withPipelineConfiguration", Description = "Configures pipeline step dependencies via a callback")] + [AspireExport(Description = "Configures pipeline step dependencies via a callback")] public static ApplicationModel.IResourceBuilder WithPipelineConfiguration(this ApplicationModel.IResourceBuilder builder, System.Action callback) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withPipelineConfigurationAsync", Description = "Configures pipeline step dependencies via an async callback")] + [AspireExportIgnore(Reason = "Polyglot app hosts use the synchronous Action<> overload via withPipelineConfiguration.")] public static ApplicationModel.IResourceBuilder WithPipelineConfiguration(this ApplicationModel.IResourceBuilder builder, System.Func callback) where T : ApplicationModel.IResource { throw null; } @@ -4312,7 +4474,7 @@ public static ApplicationModel.IResourceBuilder WithPipelineStepFactory(th public static ApplicationModel.IResourceBuilder WithPipelineStepFactory(this ApplicationModel.IResourceBuilder builder, System.Func>> factory) where T : ApplicationModel.IResource { throw null; } - [AspireExport("withPipelineStepFactory", Description = "Adds a pipeline step to the resource")] + [AspireExport(Description = "Adds a pipeline step to the resource")] public static ApplicationModel.IResourceBuilder WithPipelineStepFactory(this ApplicationModel.IResourceBuilder builder, string stepName, System.Func callback, string[]? dependsOn = null, string[]? requiredBy = null, string[]? tags = null, string? description = null) where T : ApplicationModel.IResource { throw null; } } @@ -4387,24 +4549,48 @@ public static partial class PublishingExtensions [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static partial class WellKnownPipelineSteps { + [AspireValue("WellKnownPipelineSteps")] + public const string BeforeStart = "before-start"; + [AspireValue("WellKnownPipelineSteps")] public const string Build = "build"; + [AspireValue("WellKnownPipelineSteps")] public const string BuildPrereq = "build-prereq"; + [AspireValue("WellKnownPipelineSteps")] + public const string CheckContainerRuntime = "check-container-runtime"; + [AspireValue("WellKnownPipelineSteps")] public const string Deploy = "deploy"; + [AspireValue("WellKnownPipelineSteps")] public const string DeployPrereq = "deploy-prereq"; + [AspireValue("WellKnownPipelineSteps")] + public const string Destroy = "destroy"; + [AspireValue("WellKnownPipelineSteps")] + public const string DestroyPrereq = "destroy-prereq"; + [AspireValue("WellKnownPipelineSteps")] public const string Diagnostics = "diagnostics"; + [AspireValue("WellKnownPipelineSteps")] public const string ProcessParameters = "process-parameters"; + [AspireValue("WellKnownPipelineSteps")] public const string Publish = "publish"; + [AspireValue("WellKnownPipelineSteps")] public const string PublishPrereq = "publish-prereq"; + [AspireValue("WellKnownPipelineSteps")] public const string Push = "push"; + [AspireValue("WellKnownPipelineSteps")] public const string PushPrereq = "push-prereq"; + [AspireValue("WellKnownPipelineSteps")] + public const string ValidateComputeEnvironments = "validate-compute-environments"; } [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public static partial class WellKnownPipelineTags { + [AspireValue("WellKnownPipelineTags")] public const string BuildCompute = "build-compute"; + [AspireValue("WellKnownPipelineTags")] public const string DeployCompute = "deploy-compute"; + [AspireValue("WellKnownPipelineTags")] public const string ProvisionInfrastructure = "provision-infra"; + [AspireValue("WellKnownPipelineTags")] public const string PushContainerImage = "push-container-image"; } } @@ -4441,6 +4627,34 @@ public partial record BuildImageSecretValue(string? Value, BuildImageSecretType { } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECONTAINERRUNTIME001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public sealed partial class ComposeOperationContext + { + public string? ComposeFilePath { get { throw null; } init { } } + + public string? EnvFilePath { get { throw null; } init { } } + + public required string ProjectName { get { throw null; } init { } } + + public required string WorkingDirectory { get { throw null; } init { } } + } + + [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECONTAINERRUNTIME001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public sealed partial class ComposeServiceInfo + { + public System.Collections.Generic.IReadOnlyList? Publishers { get { throw null; } init { } } + + public string? Service { get { throw null; } init { } } + } + + [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECONTAINERRUNTIME001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public sealed partial class ComposeServicePort + { + public int? PublishedPort { get { throw null; } init { } } + + public int? TargetPort { get { throw null; } init { } } + } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES003", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public partial class ContainerImageBuildOptions { @@ -4491,12 +4705,21 @@ public partial interface IContainerRuntime System.Threading.Tasks.Task BuildImageAsync(string contextPath, string dockerfilePath, ContainerImageBuildOptions? options, System.Collections.Generic.Dictionary buildArguments, System.Collections.Generic.Dictionary buildSecrets, string? stage, System.Threading.CancellationToken cancellationToken); System.Threading.Tasks.Task CheckIfRunningAsync(System.Threading.CancellationToken cancellationToken); + System.Threading.Tasks.Task ComposeDownAsync(ComposeOperationContext context, System.Threading.CancellationToken cancellationToken); + System.Threading.Tasks.Task?> ComposeListServicesAsync(ComposeOperationContext context, System.Threading.CancellationToken cancellationToken); + System.Threading.Tasks.Task ComposeUpAsync(ComposeOperationContext context, System.Threading.CancellationToken cancellationToken); System.Threading.Tasks.Task LoginToRegistryAsync(string registryServer, string username, string password, System.Threading.CancellationToken cancellationToken); System.Threading.Tasks.Task PushImageAsync(ApplicationModel.IResource resource, System.Threading.CancellationToken cancellationToken); System.Threading.Tasks.Task RemoveImageAsync(string imageName, System.Threading.CancellationToken cancellationToken); System.Threading.Tasks.Task TagImageAsync(string localImageName, string targetImageName, System.Threading.CancellationToken cancellationToken); } + [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECONTAINERRUNTIME001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] + public partial interface IContainerRuntimeResolver + { + System.Threading.Tasks.Task ResolveAsync(System.Threading.CancellationToken cancellationToken = default); + } + [System.Obsolete("IDistributedApplicationPublisher is obsolete. Use PipelineStep where applicable.")] public partial interface IDistributedApplicationPublisher { diff --git a/src/Aspire.TypeSystem/api/Aspire.TypeSystem.cs b/src/Aspire.TypeSystem/api/Aspire.TypeSystem.cs index d791e6e339a..36306fbdd3f 100644 --- a/src/Aspire.TypeSystem/api/Aspire.TypeSystem.cs +++ b/src/Aspire.TypeSystem/api/Aspire.TypeSystem.cs @@ -30,6 +30,13 @@ public sealed partial class AspireUnionData public required System.Type[] Types { get { throw null; } init { } } } + public sealed partial class AspireValueData + { + public required string CatalogName { get { throw null; } init { } } + + public string? Name { get { throw null; } init { } } + } + public sealed partial class AtsCallbackParameterInfo { public required string Name { get { throw null; } init { } } @@ -47,8 +54,12 @@ public sealed partial class AtsCapabilityInfo public System.Collections.Generic.IReadOnlyList ExpandedTargetTypes { get { throw null; } set { } } + public bool IsObsolete { get { throw null; } init { } } + public required string MethodName { get { throw null; } set { } } + public string? ObsoleteMessage { get { throw null; } init { } } + public string? OwningTypeName { get { throw null; } init { } } public required System.Collections.Generic.IReadOnlyList Parameters { get { throw null; } init { } } @@ -141,6 +152,8 @@ public sealed partial class AtsContext public required System.Collections.Generic.IReadOnlyList EnumTypes { get { throw null; } init { } } + public System.Collections.Generic.IReadOnlyList ExportedValues { get { throw null; } init { } } + public required System.Collections.Generic.IReadOnlyList HandleTypes { get { throw null; } init { } } public System.Collections.Generic.Dictionary Methods { get { throw null; } } @@ -207,6 +220,19 @@ public sealed partial class AtsEnumTypeInfo public required System.Collections.Generic.IReadOnlyList Values { get { throw null; } init { } } } + public sealed partial class AtsExportedValueInfo + { + public string? Description { get { throw null; } init { } } + + public required string OwningAssemblyName { get { throw null; } init { } } + + public required System.Collections.Generic.IReadOnlyList PathSegments { get { throw null; } init { } } + + public required AtsTypeRef Type { get { throw null; } init { } } + + public required System.Text.Json.Nodes.JsonNode? Value { get { throw null; } init { } } + } + public sealed partial class AtsParameterInfo { public System.Collections.Generic.IReadOnlyList? CallbackParameters { get { throw null; } init { } } @@ -246,6 +272,7 @@ public sealed partial class AtsTypeInfo public System.Collections.Generic.IReadOnlyList BaseTypeHierarchy { get { throw null; } init { } } + [System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)] public System.Type? ClrType { get { throw null; } init { } } public bool HasExposeMethods { get { throw null; } init { } } @@ -268,12 +295,17 @@ public static partial class AtsTypeMapping public sealed partial class AtsTypeRef { + public AtsTypeRef? BaseType { get { throw null; } init { } } + public AtsTypeCategory Category { get { throw null; } set { } } + [System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)] public System.Type? ClrType { get { throw null; } init { } } public AtsTypeRef? ElementType { get { throw null; } init { } } + public System.Collections.Generic.IReadOnlyList ImplementedInterfaces { get { throw null; } init { } } + public bool IsDistributedApplication { get { throw null; } } public bool IsDistributedApplicationBuilder { get { throw null; } } @@ -307,6 +339,16 @@ public static partial class AttributeDataReader public static AspireUnionData? GetAspireUnionData(System.Reflection.PropertyInfo property) { throw null; } + public static AspireValueData? GetAspireValueData(System.Reflection.FieldInfo field) { throw null; } + + public static AspireValueData? GetAspireValueData(System.Reflection.PropertyInfo property) { throw null; } + + public static ObsoleteData? GetObsoleteData(System.Reflection.MethodInfo method) { throw null; } + + public static ObsoleteData? GetObsoleteData(System.Reflection.PropertyInfo property) { throw null; } + + public static ObsoleteData? GetObsoleteData(System.Type type) { throw null; } + public static bool HasAspireDtoData(System.Type type) { throw null; } public static bool HasAspireExportIgnoreData(System.Reflection.MethodInfo method) { throw null; } @@ -355,6 +397,7 @@ public static partial class HostingTypeNames public const string AspireExportAttribute = "Aspire.Hosting.AspireExportAttribute"; public const string AspireExportIgnoreAttribute = "Aspire.Hosting.AspireExportIgnoreAttribute"; public const string AspireUnionAttribute = "Aspire.Hosting.AspireUnionAttribute"; + public const string AspireValueAttribute = "Aspire.Hosting.AspireValueAttribute"; public const string DistributedApplication = "Aspire.Hosting.DistributedApplication"; public const string DistributedApplicationBuilder = "Aspire.Hosting.IDistributedApplicationBuilder"; public const string ReferenceExpression = "Aspire.Hosting.ApplicationModel.ReferenceExpression"; @@ -380,6 +423,13 @@ public partial interface ILanguageSupport System.Collections.Generic.Dictionary Scaffold(ScaffoldRequest request); } + public sealed partial class ObsoleteData + { + public bool IsError { get { throw null; } init { } } + + public string? Message { get { throw null; } init { } } + } + public sealed partial class RuntimeSpec { public required string CodeGenLanguage { get { throw null; } init { } } @@ -392,12 +442,16 @@ public sealed partial class RuntimeSpec public string? ExtensionLaunchCapability { get { throw null; } init { } } + public CommandSpec[]? Initialize { get { throw null; } init { } } + public CommandSpec? InstallDependencies { get { throw null; } init { } } public required string Language { get { throw null; } init { } } public System.Collections.Generic.Dictionary? MigrationFiles { get { throw null; } init { } } + public CommandSpec[]? PreExecute { get { throw null; } init { } } + public CommandSpec? PublishExecute { get { throw null; } init { } } public CommandSpec? WatchExecute { get { throw null; } init { } } diff --git a/tests/Aspire.Cli.EndToEnd.Tests/AgentMcpLogsTests.cs b/tests/Aspire.Cli.EndToEnd.Tests/AgentMcpLogsTests.cs new file mode 100644 index 00000000000..53e2d3677b6 --- /dev/null +++ b/tests/Aspire.Cli.EndToEnd.Tests/AgentMcpLogsTests.cs @@ -0,0 +1,78 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Aspire.Cli.EndToEnd.Tests.Helpers; +using Aspire.Cli.Tests.Utils; +using Hex1b.Automation; +using Xunit; + +namespace Aspire.Cli.EndToEnd.Tests; + +/// +/// End-to-end tests for the aspire agent mcp command with structured logs. +/// Each test class runs as a separate CI job for parallelization. +/// +public sealed class AgentMcpLogsTests(ITestOutputHelper output) +{ + [Fact] + [CaptureWorkspaceOnFailure] + public Task AgentMcpListStructuredLogsReturnsLogsFromStarterApp() + => AgentMcpListStructuredLogsFromStarterAppCore(isolated: false, useDevLocalhost: false); + + [Fact] + [CaptureWorkspaceOnFailure] + public Task AgentMcpListStructuredLogsReturnsLogsFromStarterApp_Isolated() + => AgentMcpListStructuredLogsFromStarterAppCore(isolated: true, useDevLocalhost: false); + + [Fact] + [CaptureWorkspaceOnFailure] + public Task AgentMcpListStructuredLogsReturnsLogsFromStarterApp_DevLocalhost() + => AgentMcpListStructuredLogsFromStarterAppCore(isolated: false, useDevLocalhost: true); + + private async Task AgentMcpListStructuredLogsFromStarterAppCore(bool isolated, bool useDevLocalhost) + { + var repoRoot = CliE2ETestHelpers.GetRepoRoot(); + var strategy = CliInstallStrategy.Detect(output.WriteLine); + + using var workspace = TemporaryWorkspace.Create(output); + + using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, mountDockerSocket: true, workspace: workspace); + + var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken); + + var counter = new SequenceCounter(); + var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500)); + + await auto.PrepareDockerEnvironmentAsync(counter, workspace); + await auto.InstallAspireCliAsync(strategy, counter); + + // Create a new Starter project (includes an ASP.NET Core apiservice) + await auto.AspireNewAsync("AspireMcpLogsApp", counter, useDevLocalhost: useDevLocalhost); + + // Navigate to the AppHost directory + await auto.TypeAsync("cd AspireMcpLogsApp/AspireMcpLogsApp.AppHost"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Start the AppHost + await auto.AspireStartAsync(counter, isolated: isolated); + + // Wait for the apiservice resource to be running before querying logs + await auto.TypeAsync("aspire wait apiservice --status up --timeout 300"); + await auto.EnterAsync(); + await auto.WaitUntilTextAsync("is up (running).", timeout: TimeSpan.FromMinutes(6)); + await auto.WaitForSuccessPromptAsync(counter); + + // Call the MCP tool against the running AppHost + await auto.CallAgentMcpToolAsync(counter, "list_structured_logs", "STRUCTURED LOGS DATA"); + + // Stop the AppHost + await auto.AspireStopAsync(counter); + + // Exit the shell + await auto.TypeAsync("exit"); + await auto.EnterAsync(); + + await pendingRun; + } +} diff --git a/tests/Aspire.Cli.EndToEnd.Tests/DashboardOtelTracesTests.cs b/tests/Aspire.Cli.EndToEnd.Tests/DashboardOtelTracesTests.cs deleted file mode 100644 index df23367956e..00000000000 --- a/tests/Aspire.Cli.EndToEnd.Tests/DashboardOtelTracesTests.cs +++ /dev/null @@ -1,87 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Aspire.Cli.EndToEnd.Tests.Helpers; -using Aspire.Cli.Tests.Utils; -using Hex1b.Automation; -using Xunit; - -namespace Aspire.Cli.EndToEnd.Tests; - -/// -/// End-to-end tests for the aspire dashboard run and aspire otel traces commands. -/// Each test class runs as a separate CI job for parallelization. -/// -public sealed class DashboardOtelTracesTests(ITestOutputHelper output) -{ - [Fact] - [CaptureWorkspaceOnFailure] - public async Task DashboardRunWithOtelTracesReturnsNoTraces() - { - var repoRoot = CliE2ETestHelpers.GetRepoRoot(); - var strategy = CliInstallStrategy.Detect(output.WriteLine); - - var workspace = TemporaryWorkspace.Create(output); - - using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, mountDockerSocket: false, workspace: workspace); - - var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken); - - var counter = new SequenceCounter(); - var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500)); - - await auto.PrepareDockerEnvironmentAsync(counter, workspace); - await auto.InstallAspireCliAsync(strategy, counter); - - // Store the dashboard log path inside the workspace so it gets captured on failure - var dashboardLogPath = $"/workspace/{workspace.WorkspaceRoot.Name}/dashboard.log"; - - // Start the dashboard in the background with anonymous access and telemetry API enabled - await auto.TypeAsync($"aspire dashboard run --allow-anonymous --enable-api > {dashboardLogPath} 2>&1 &"); - await auto.EnterAsync(); - await auto.WaitForSuccessPromptAsync(counter); - - // Store the dashboard PID for cleanup - await auto.TypeAsync("DASHBOARD_PID=$!"); - await auto.EnterAsync(); - await auto.WaitForSuccessPromptAsync(counter); - - // Wait for the dashboard to become ready by polling the frontend URL - await auto.TypeAsync("for i in $(seq 1 30); do curl -ksSL -o /dev/null -w '%{http_code}' http://localhost:18888 2>/dev/null | grep -q 200 && break; sleep 1; done"); - await auto.EnterAsync(); - await auto.WaitForSuccessPromptAsync(counter, TimeSpan.FromSeconds(60)); - - // Dump dashboard log for debugging visibility in the recording - await auto.TypeAsync($"echo '=== DASHBOARD LOG ==='; cat {dashboardLogPath}; echo '=== END DASHBOARD LOG ==='"); - await auto.EnterAsync(); - await auto.WaitForSuccessPromptAsync(counter); - - // Dump CLI logs for debugging - await auto.TypeAsync("echo '=== CLI LOGS ==='; ls -lt ~/.aspire/logs/ 2>/dev/null; CLI_LOG=$(ls -t ~/.aspire/logs/cli_*.log 2>/dev/null | head -1); [ -n \"$CLI_LOG\" ] && tail -50 \"$CLI_LOG\"; echo '=== END CLI LOGS ==='"); - await auto.EnterAsync(); - await auto.WaitForSuccessPromptAsync(counter); - - // Verify the dashboard process is still running before querying traces - await auto.TypeAsync("kill -0 $DASHBOARD_PID 2>/dev/null && echo 'dashboard-running' || echo 'dashboard-stopped'"); - await auto.EnterAsync(); - await auto.WaitUntilTextAsync("dashboard-running", timeout: TimeSpan.FromSeconds(10)); - await auto.WaitForSuccessPromptAsync(counter); - - // Run aspire otel traces against the standalone dashboard - await auto.TypeAsync("aspire otel traces --dashboard-url http://localhost:18888"); - await auto.EnterAsync(); - await auto.WaitUntilTextAsync("No traces found", timeout: TimeSpan.FromSeconds(30)); - await auto.WaitForSuccessPromptAsync(counter); - - // Clean up: kill the background dashboard process - await auto.TypeAsync("kill -9 $DASHBOARD_PID 2>/dev/null; wait $DASHBOARD_PID 2>/dev/null; true"); - await auto.EnterAsync(); - await auto.WaitForSuccessPromptAsync(counter); - - // Exit the shell - await auto.TypeAsync("exit"); - await auto.EnterAsync(); - - await pendingRun; - } -} diff --git a/tests/Aspire.Cli.EndToEnd.Tests/DashboardRunTests.cs b/tests/Aspire.Cli.EndToEnd.Tests/DashboardRunTests.cs new file mode 100644 index 00000000000..952078bd794 --- /dev/null +++ b/tests/Aspire.Cli.EndToEnd.Tests/DashboardRunTests.cs @@ -0,0 +1,177 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Aspire.Cli.EndToEnd.Tests.Helpers; +using Aspire.Cli.Tests.Utils; +using Hex1b.Automation; +using Xunit; + +namespace Aspire.Cli.EndToEnd.Tests; + +/// +/// End-to-end tests for the aspire dashboard run command combined with aspire otel and aspire agent mcp. +/// Each test class runs as a separate CI job for parallelization. +/// +public sealed class DashboardRunTests(ITestOutputHelper output) +{ + [Fact] + [CaptureWorkspaceOnFailure] + public async Task DashboardRunWithOtelTracesReturnsNoTraces() + { + await DashboardRunWithOtelTracesReturnsNoTracesCore("http://localhost:18888", "http://localhost:18888"); + } + + [Fact] + [CaptureWorkspaceOnFailure] + public async Task DashboardRunWithOtelTracesReturnsNoTraces_DevLocalhost() + { + await DashboardRunWithOtelTracesReturnsNoTracesCore("http://dashboard.dev.localhost:18888", "http://localhost:18888"); + } + + private async Task DashboardRunWithOtelTracesReturnsNoTracesCore(string frontendUrl, string localhostUrl) + { + var repoRoot = CliE2ETestHelpers.GetRepoRoot(); + var strategy = CliInstallStrategy.Detect(output.WriteLine); + + var workspace = TemporaryWorkspace.Create(output); + + using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, mountDockerSocket: false, workspace: workspace); + + var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken); + + var counter = new SequenceCounter(); + var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500)); + + await auto.PrepareDockerEnvironmentAsync(counter, workspace); + await auto.InstallAspireCliAsync(strategy, counter); + + // Use a known browser token so we can construct the dashboard URL directly, + // avoiding the need to parse it from logs (which contain Spectre Console OSC 8 + // escape sequences that break grep-based URL extraction). + var browserToken = "testtoken1234567890abcdef12345678"; + + // Set the browser token env var before starting the dashboard + await auto.TypeAsync($"export DASHBOARD__FRONTEND__BROWSERTOKEN={browserToken}"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Store the dashboard log path inside the workspace so it gets captured on failure + var dashboardLogPath = $"/workspace/{workspace.WorkspaceRoot.Name}/dashboard.log"; + + // Start the dashboard in the background with the specified frontend URL + await auto.TypeAsync($"aspire dashboard run --frontend-url {frontendUrl} > {dashboardLogPath} 2>&1 &"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Store the dashboard PID for cleanup + await auto.TypeAsync("DASHBOARD_PID=$!"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Wait for the dashboard to become ready by polling the localhost URL + await auto.TypeAsync($"for i in $(seq 1 30); do curl -ksSL -o /dev/null -w '%{{http_code}}' {localhostUrl} 2>/dev/null | grep -q 200 && break; sleep 1; done"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter, TimeSpan.FromSeconds(60)); + + // Dump dashboard log for debugging visibility in the recording + await auto.TypeAsync($"echo '=== DASHBOARD LOG ==='; cat {dashboardLogPath}; echo '=== END DASHBOARD LOG ==='"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Dump CLI logs for debugging + await auto.TypeAsync("echo '=== CLI LOGS ==='; ls -lt ~/.aspire/logs/ 2>/dev/null; CLI_LOG=$(ls -t ~/.aspire/logs/cli_*.log 2>/dev/null | head -1); [ -n \"$CLI_LOG\" ] && tail -50 \"$CLI_LOG\"; echo '=== END CLI LOGS ==='"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Construct the dashboard URL using the known token and the frontend URL. + // In the dev.localhost variant this exercises the CLI's NormalizeDashboardUrl path end-to-end. + var dashboardUrl = $"{frontendUrl}/login?t={browserToken}"; + + await auto.TypeAsync($"aspire otel traces --dashboard-url \"{dashboardUrl}\""); + await auto.EnterAsync(); + await auto.WaitUntilTextAsync("No traces found", timeout: TimeSpan.FromSeconds(30)); + await auto.WaitForSuccessPromptAsync(counter); + + // Clean up: kill the background dashboard process + await auto.TypeAsync("kill -9 $DASHBOARD_PID 2>/dev/null; wait $DASHBOARD_PID 2>/dev/null; true"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Exit the shell + await auto.TypeAsync("exit"); + await auto.EnterAsync(); + + await pendingRun; + } + + [Fact] + [CaptureWorkspaceOnFailure] + public Task DashboardRunWithAgentMcpListTracesReturnsNoTraces() + => DashboardRunWithAgentMcpCore("http://localhost:18888", "http://localhost:18888", "list_traces", "TRACES DATA"); + + [Fact] + [CaptureWorkspaceOnFailure] + public Task DashboardRunWithAgentMcpListTracesReturnsNoTraces_DevLocalhost() + => DashboardRunWithAgentMcpCore("http://dashboard.dev.localhost:18888", "http://localhost:18888", "list_traces", "TRACES DATA"); + + private async Task DashboardRunWithAgentMcpCore(string frontendUrl, string localhostUrl, string toolName, string expectedMarker) + { + var repoRoot = CliE2ETestHelpers.GetRepoRoot(); + var strategy = CliInstallStrategy.Detect(output.WriteLine); + + var workspace = TemporaryWorkspace.Create(output); + + using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, mountDockerSocket: false, workspace: workspace); + + var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken); + + var counter = new SequenceCounter(); + var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500)); + + await auto.PrepareDockerEnvironmentAsync(counter, workspace); + await auto.InstallAspireCliAsync(strategy, counter); + + // Use a known browser token so we can construct the dashboard URL directly + var browserToken = "testtoken1234567890abcdef12345678"; + + // Set the browser token env var before starting the dashboard + await auto.TypeAsync($"export DASHBOARD__FRONTEND__BROWSERTOKEN={browserToken}"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Store the dashboard log path inside the workspace so it gets captured on failure + var dashboardLogPath = $"/workspace/{workspace.WorkspaceRoot.Name}/dashboard.log"; + + // Start the dashboard in the background with the specified frontend URL + await auto.TypeAsync($"aspire dashboard run --frontend-url {frontendUrl} > {dashboardLogPath} 2>&1 &"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Store the dashboard PID for cleanup + await auto.TypeAsync("DASHBOARD_PID=$!"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Wait for the dashboard to become ready by polling the localhost URL + await auto.TypeAsync($"for i in $(seq 1 30); do curl -ksSL -o /dev/null -w '%{{http_code}}' {localhostUrl} 2>/dev/null | grep -q 200 && break; sleep 1; done"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter, TimeSpan.FromSeconds(60)); + + // Construct the dashboard URL using the known token and the frontend URL + var dashboardUrl = $"{frontendUrl}/login?t={browserToken}"; + + // Call the MCP tool against the standalone dashboard + await auto.CallAgentMcpToolAsync(counter, toolName, expectedMarker, $"--dashboard-url \"{dashboardUrl}\""); + + // Clean up: kill the background dashboard process + await auto.TypeAsync("kill -9 $DASHBOARD_PID 2>/dev/null; wait $DASHBOARD_PID 2>/dev/null; true"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Exit the shell + await auto.TypeAsync("exit"); + await auto.EnterAsync(); + + await pendingRun; + } +} diff --git a/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs b/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs index 84961a3e302..579eee358b5 100644 --- a/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs +++ b/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs @@ -779,7 +779,7 @@ await auto.TypeAsync( await auto.TypeAsync( $"DASHBOARD_URL=$(sed -n " + - "'s/.*\"dashboardUrl\"[[:space:]]*:[[:space:]]*\"\\(https\\?:\\/\\/localhost:[0-9]*\\).*/\\1/p' " + + "'s/.*\"dashboardUrl\"[[:space:]]*:[[:space:]]*\"\\(https\\?:\\/\\/[a-z.]*localhost:[0-9]*\\).*/\\1/p' " + $"\"{jsonFile}\" | head -1)"); await auto.EnterAsync(); await auto.WaitForSuccessPromptAsync(counter); @@ -1024,6 +1024,59 @@ private static string BuildAspireDiagnosticsCaptureCommand(string destinationExp return null; } + /// + /// Sends a JSON-RPC initialize/initialized/tools-call sequence to aspire agent mcp and verifies the response. + /// + /// The terminal automator. + /// The prompt sequence counter. + /// The MCP tool name to invoke (e.g. list_structured_logs). + /// A string expected in the tool call output (e.g. STRUCTURED LOGS DATA). + /// Additional arguments to pass to aspire agent mcp (e.g. --dashboard-url "..."). + internal static async Task CallAgentMcpToolAsync( + this Hex1bTerminalAutomator auto, + SequenceCounter counter, + string toolName, + string expectedMarker, + string? mcpArgs = null) + { + var argsFragment = mcpArgs is not null ? $" {mcpArgs}" : string.Empty; + + // Send JSON-RPC messages to the MCP server via a compound command. + // The sleeps ensure proper protocol timing between initialize, initialized notification, and tool call. + await auto.TypeAsync( + "{ " + + "echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"e2e-test\",\"version\":\"0.1.0\"}}}'; " + + "sleep 3; " + + "echo '{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\"}'; " + + "sleep 1; " + + $"echo '{{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{{\"name\":\"{toolName}\",\"arguments\":{{}}}}}}'; " + + "sleep 15; " + + $"}} | aspire agent mcp{argsFragment} > /tmp/mcp_out.txt 2>/tmp/mcp_err.txt || true"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter, TimeSpan.FromSeconds(60)); + + // Dump output for debugging visibility in the recording + await auto.TypeAsync("cat /tmp/mcp_out.txt | head -50"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + // Check that the response contains the expected data marker + await auto.TypeAsync( + $"if grep -q '{expectedMarker}' /tmp/mcp_out.txt; then echo 'MCP_DATA_PRESENT'; " + + $"elif grep -q '{toolName}' /tmp/mcp_out.txt; then echo 'MCP_TOOL_FOUND_BUT_NO_DATA'; " + + "else echo 'MCP_DATA_MISSING'; fi"); + await auto.EnterAsync(); + await auto.WaitUntilTextAsync("MCP_DATA_PRESENT", timeout: TimeSpan.FromSeconds(10)); + await auto.WaitForAnyPromptAsync(counter); + + // Verify the initialize response was received (confirms MCP handshake worked) + await auto.TypeAsync( + "grep -q 'aspire-mcp-server' /tmp/mcp_out.txt && echo 'MCP_INIT_OK' || echo 'MCP_INIT_MISSING'"); + await auto.EnterAsync(); + await auto.WaitUntilTextAsync("MCP_INIT_OK", timeout: TimeSpan.FromSeconds(10)); + await auto.WaitForAnyPromptAsync(counter); + } + private static bool ShouldPreserveLocalWorkspace() { return TestContext.Current?.KeyValueStorage.TryGetValue("PreserveWorkspaceOnFailure", out var value) == true && diff --git a/tests/Aspire.Cli.EndToEnd.Tests/TypeScriptStarterTemplateTests.cs b/tests/Aspire.Cli.EndToEnd.Tests/TypeScriptStarterTemplateTests.cs new file mode 100644 index 00000000000..864c1ed1db3 --- /dev/null +++ b/tests/Aspire.Cli.EndToEnd.Tests/TypeScriptStarterTemplateTests.cs @@ -0,0 +1,69 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Aspire.Cli.EndToEnd.Tests.Helpers; +using Aspire.Cli.Tests.Utils; +using Hex1b.Automation; +using Xunit; + +namespace Aspire.Cli.EndToEnd.Tests; + +/// +/// End-to-end tests for the TypeScript Express/React starter template (aspire-ts-starter). +/// Validates that aspire new creates a working Express API + React frontend project +/// and that aspire run starts it successfully. +/// +public sealed class TypeScriptStarterTemplateTests(ITestOutputHelper output) +{ + [CaptureWorkspaceOnFailure] + [Fact] + public async Task CreateAndRunTypeScriptStarterProject() + { + var repoRoot = CliE2ETestHelpers.GetRepoRoot(); + var strategy = CliInstallStrategy.Detect(output.WriteLine); + var workspace = TemporaryWorkspace.Create(output); + + using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, mountDockerSocket: true, workspace: workspace); + + var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken); + + var counter = new SequenceCounter(); + var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500)); + + await auto.PrepareDockerEnvironmentAsync(counter, workspace); + await auto.InstallAspireCliAsync(strategy, counter); + + // Step 1: Create project using aspire new, selecting the Express/React template + await auto.AspireNewAsync("TsStarterApp", counter, template: AspireTemplate.ExpressReact); + + // Step 1.5: Verify starter creation also restored the generated TypeScript SDK. + var projectRoot = Path.Combine(workspace.WorkspaceRoot.FullName, "TsStarterApp"); + var modulesDir = Path.Combine(projectRoot, ".modules"); + + if (!Directory.Exists(modulesDir)) + { + throw new InvalidOperationException($".modules directory was not created at {modulesDir}"); + } + + var aspireModulePath = Path.Combine(modulesDir, "aspire.ts"); + if (!File.Exists(aspireModulePath)) + { + throw new InvalidOperationException($"Expected generated file not found: {aspireModulePath}"); + } + + // Step 2: Navigate into the project and start it + await auto.TypeAsync("cd TsStarterApp"); + await auto.EnterAsync(); + await auto.WaitForSuccessPromptAsync(counter); + + await auto.RunCommandFailFastAsync("npm run build", counter, TimeSpan.FromMinutes(2)); + + await auto.AspireStartAsync(counter); + await auto.AspireStopAsync(counter); + + await auto.TypeAsync("exit"); + await auto.EnterAsync(); + + await pendingRun; + } +} diff --git a/tests/Aspire.Cli.Tests/Commands/DoCommandTests.cs b/tests/Aspire.Cli.Tests/Commands/DoCommandTests.cs index 0170fbc96fd..7356d6fd67f 100644 --- a/tests/Aspire.Cli.Tests/Commands/DoCommandTests.cs +++ b/tests/Aspire.Cli.Tests/Commands/DoCommandTests.cs @@ -509,4 +509,111 @@ public async Task DoCommandWithHelpShowsListStepsOption() var exitCode = await result.InvokeAsync().DefaultTimeout(); Assert.Equal(0, exitCode); } + + [Fact] + public async Task DoCommandForwardsPipelineLogLevelAsLogLevelToAppHost() + { + using var tempRepo = TemporaryWorkspace.Create(outputHelper); + + string[]? capturedArgs = null; + + var services = CliTestHelper.CreateServiceCollection(tempRepo, outputHelper, options => + { + options.ProjectLocatorFactory = (sp) => new TestProjectLocator(); + + options.DotNetCliRunnerFactory = (sp) => + { + var runner = new TestDotNetCliRunner + { + BuildAsyncCallback = (projectFile, noRestore, options, cancellationToken) => 0, + + GetAppHostInformationAsyncCallback = (projectFile, options, cancellationToken) => + { + return (0, true, VersionHelper.GetDefaultTemplateVersion()); + }, + + RunAsyncCallback = async (projectFile, watch, noBuild, noRestore, args, env, backchannelCompletionSource, options, cancellationToken) => + { + capturedArgs = args; + + var completed = new TaskCompletionSource(); + var backchannel = new TestAppHostBackchannel + { + RequestStopAsyncCalled = completed + }; + backchannelCompletionSource?.SetResult(backchannel); + await completed.Task.DefaultTimeout(); + return 0; + } + }; + + return runner; + }; + }); + + using var provider = services.BuildServiceProvider(); + var command = provider.GetRequiredService(); + + var result = command.Parse("do my-step --pipeline-log-level debug"); + var exitCode = await result.InvokeAsync().DefaultTimeout(); + + Assert.Equal(0, exitCode); + Assert.NotNull(capturedArgs); + var logLevelIndex = Array.IndexOf(capturedArgs, "--log-level"); + Assert.True(logLevelIndex >= 0, "Expected --log-level argument to be passed to AppHost"); + Assert.Equal("debug", capturedArgs[logLevelIndex + 1]); + Assert.DoesNotContain("--pipeline-log-level", capturedArgs); + } + + [Fact] + public async Task DoCommandDoesNotForwardCliLogLevelToAppHost() + { + using var tempRepo = TemporaryWorkspace.Create(outputHelper); + + string[]? capturedArgs = null; + + var services = CliTestHelper.CreateServiceCollection(tempRepo, outputHelper, options => + { + options.ProjectLocatorFactory = (sp) => new TestProjectLocator(); + + options.DotNetCliRunnerFactory = (sp) => + { + var runner = new TestDotNetCliRunner + { + BuildAsyncCallback = (projectFile, noRestore, options, cancellationToken) => 0, + + GetAppHostInformationAsyncCallback = (projectFile, options, cancellationToken) => + { + return (0, true, VersionHelper.GetDefaultTemplateVersion()); + }, + + RunAsyncCallback = async (projectFile, watch, noBuild, noRestore, args, env, backchannelCompletionSource, options, cancellationToken) => + { + capturedArgs = args; + + var completed = new TaskCompletionSource(); + var backchannel = new TestAppHostBackchannel + { + RequestStopAsyncCalled = completed + }; + backchannelCompletionSource?.SetResult(backchannel); + await completed.Task.DefaultTimeout(); + return 0; + } + }; + + return runner; + }; + }); + + using var provider = services.BuildServiceProvider(); + var command = provider.GetRequiredService(); + + var result = command.Parse("do my-step --log-level Warning"); + var exitCode = await result.InvokeAsync().DefaultTimeout(); + + Assert.Equal(0, exitCode); + Assert.NotNull(capturedArgs); + Assert.DoesNotContain("--log-level", capturedArgs); + } } diff --git a/tests/Aspire.Cli.Tests/Commands/TelemetryTracesCommandTests.cs b/tests/Aspire.Cli.Tests/Commands/TelemetryTracesCommandTests.cs index d7e675c876e..006fb7f5306 100644 --- a/tests/Aspire.Cli.Tests/Commands/TelemetryTracesCommandTests.cs +++ b/tests/Aspire.Cli.Tests/Commands/TelemetryTracesCommandTests.cs @@ -3,6 +3,8 @@ using System.Net; using System.Text.Json; +using System.Text.Json.Nodes; +using Aspire.Cli.Backchannel; using Aspire.Cli.Commands; using Aspire.Cli.Resources; using Aspire.Cli.Tests.TestServices; @@ -33,6 +35,201 @@ public async Task TelemetryTracesCommand_WhenNoAppHostRunning_ReturnsSuccess() Assert.Equal(CliExitCodes.Success, exitCode); } + [Fact] + public async Task TelemetryTracesCommand_WithDevLocalhostDashboardApiUrl_UsesLocalhost() + { + using var workspace = TemporaryWorkspace.Create(outputHelper); + var outputWriter = new TestOutputTextWriter(outputHelper); + var requestedHosts = new List(); + var resourcesJson = JsonSerializer.Serialize( + new ResourceInfoJson[] { new() { Name = "frontend", InstanceId = null } }, + OtlpJsonSerializerContext.Default.ResourceInfoJsonArray); + + var resourceSpans = new OtlpResourceSpansJson[] + { + new() + { + Resource = TelemetryTestHelper.CreateOtlpResource("frontend", null), + ScopeSpans = + [ + new OtlpScopeSpansJson + { + Spans = + [ + new OtlpSpanJson + { + TraceId = "abc1234567890def", + SpanId = "span001", + Name = "GET /home", + StartTimeUnixNano = TelemetryTestHelper.DateTimeToUnixNanoseconds(s_testTime), + EndTimeUnixNano = TelemetryTestHelper.DateTimeToUnixNanoseconds(s_testTime.AddMilliseconds(50)), + Status = new OtlpSpanStatusJson { Code = 1 } + } + ] + } + ] + } + }; + var tracesResponse = new TelemetryApiResponse + { + Data = new OtlpTelemetryDataJson { ResourceSpans = resourceSpans }, + TotalCount = 1, + ReturnedCount = 1 + }; + var tracesJson = JsonSerializer.Serialize(tracesResponse, OtlpJsonSerializerContext.Default.TelemetryApiResponse); + + var monitor = new TestAuxiliaryBackchannelMonitor(); + var connection = new TestAppHostAuxiliaryBackchannel + { + IsInScope = true, + AppHostInfo = new AppHostInformation + { + AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"), + ProcessId = 1234 + }, + DashboardInfoResponse = new GetDashboardInfoResponse + { + ApiBaseUrl = "https://nextapp1.dev.localhost:64876", + ApiToken = "test-token", + DashboardUrls = ["https://nextapp1.dev.localhost:64876/login?t=test"], + IsHealthy = true + } + }; + monitor.AddConnection("hash1", "socket.hash1", connection); + + var handler = new MockHttpMessageHandler(request => + { + requestedHosts.Add(request.RequestUri!.Host); + + return request.RequestUri.AbsolutePath switch + { + "/api/telemetry/resources" => new HttpResponseMessage(HttpStatusCode.OK) + { + Content = new StringContent(resourcesJson, System.Text.Encoding.UTF8, "application/json") + }, + "/api/telemetry/traces" => new HttpResponseMessage(HttpStatusCode.OK) + { + Content = new StringContent(tracesJson, System.Text.Encoding.UTF8, "application/json") + }, + _ => new HttpResponseMessage(HttpStatusCode.NotFound) + }; + }); + + var services = CliTestHelper.CreateServiceCollection(workspace, outputHelper, options => + { + options.AuxiliaryBackchannelMonitorFactory = _ => monitor; + options.OutputTextWriter = outputWriter; + options.DisableAnsi = true; + }); + services.AddSingleton(handler); + services.Replace(ServiceDescriptor.Singleton(new MockHttpClientFactory(handler))); + + using var provider = services.BuildServiceProvider(); + var command = provider.GetRequiredService(); + var result = command.Parse("otel traces --format json -n 5"); + + var exitCode = await result.InvokeAsync().DefaultTimeout(); + + Assert.Equal(CliExitCodes.Success, exitCode); + Assert.All(requestedHosts, host => Assert.Equal("localhost", host)); + + var jsonLine = outputWriter.Logs.Single(l => l.TrimStart().StartsWith('[')); + var items = JsonNode.Parse(jsonLine)!.AsArray(); + Assert.Single(items); + + var item = items[0]!; + Assert.Equal("abc1234567890def", item["traceId"]!.GetValue()); + + var dashboardUrl = item["dashboardUrl"]!.GetValue(); + Assert.Equal("https://nextapp1.dev.localhost:64876/traces/detail/abc1234567890def", dashboardUrl); + } + + [Fact] + public async Task TelemetryTracesCommand_WithDevLocalhostDashboardUrlArg_PreservesDisplayUrl() + { + using var workspace = TemporaryWorkspace.Create(outputHelper); + var outputWriter = new TestOutputTextWriter(outputHelper); + var requestedHosts = new List(); + + var resourceSpans = new OtlpResourceSpansJson[] + { + new() + { + Resource = TelemetryTestHelper.CreateOtlpResource("frontend", null), + ScopeSpans = + [ + new OtlpScopeSpansJson + { + Spans = + [ + new OtlpSpanJson + { + TraceId = "abc1234567890def", + SpanId = "span001", + Name = "GET /home", + StartTimeUnixNano = TelemetryTestHelper.DateTimeToUnixNanoseconds(s_testTime), + EndTimeUnixNano = TelemetryTestHelper.DateTimeToUnixNanoseconds(s_testTime.AddMilliseconds(50)), + Status = new OtlpSpanStatusJson { Code = 1 } + } + ] + } + ] + } + }; + var tracesResponse = new TelemetryApiResponse + { + Data = new OtlpTelemetryDataJson { ResourceSpans = resourceSpans }, + TotalCount = 1, + ReturnedCount = 1 + }; + var tracesJson = JsonSerializer.Serialize(tracesResponse, OtlpJsonSerializerContext.Default.TelemetryApiResponse); + + var handler = new MockHttpMessageHandler(request => + { + requestedHosts.Add(request.RequestUri!.Host); + + return request.RequestUri.AbsolutePath switch + { + "/api/telemetry/resources" => new HttpResponseMessage(HttpStatusCode.OK) + { + Content = new StringContent("[]", System.Text.Encoding.UTF8, "application/json") + }, + "/api/telemetry/traces" => new HttpResponseMessage(HttpStatusCode.OK) + { + Content = new StringContent(tracesJson, System.Text.Encoding.UTF8, "application/json") + }, + _ => new HttpResponseMessage(HttpStatusCode.NotFound) + }; + }); + + var services = CliTestHelper.CreateServiceCollection(workspace, outputHelper, options => + { + options.OutputTextWriter = outputWriter; + options.DisableAnsi = true; + }); + services.AddSingleton(handler); + services.Replace(ServiceDescriptor.Singleton(new MockHttpClientFactory(handler))); + + using var provider = services.BuildServiceProvider(); + var command = provider.GetRequiredService(); + var result = command.Parse("otel traces --format json -n 5 --dashboard-url http://dashboard.dev.localhost:18888"); + + var exitCode = await result.InvokeAsync().DefaultTimeout(); + + Assert.Equal(CliExitCodes.Success, exitCode); + + // HTTP requests should be normalized to localhost + Assert.All(requestedHosts, host => Assert.Equal("localhost", host)); + + var jsonLine = outputWriter.Logs.Single(l => l.TrimStart().StartsWith('[')); + var items = JsonNode.Parse(jsonLine)!.AsArray(); + Assert.Single(items); + + // The display URL in JSON output should preserve the original *.dev.localhost hostname + var dashboardUrl = items[0]!["dashboardUrl"]!.GetValue(); + Assert.Equal("http://dashboard.dev.localhost:18888/traces/detail/abc1234567890def", dashboardUrl); + } + [Theory] [InlineData(-1)] [InlineData(0)] diff --git a/tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs b/tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs index 545ded68c96..6c2601917ab 100644 --- a/tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs +++ b/tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs @@ -150,6 +150,7 @@ public static IServiceCollection CreateServiceCollection(TemporaryWorkspace work services.AddSingleton(options.AppHostServerSessionFactory); services.AddSingleton(); services.AddSingleton(options.LanguageServiceFactory); + services.AddSingleton(); // Bundle layout services - return null/no-op implementations to trigger SDK mode fallback // This ensures backward compatibility: no layout found = use legacy SDK mode diff --git a/tests/Aspire.Dashboard.Tests/TelemetryRepositoryTests/TelemetryLimitTests.cs b/tests/Aspire.Dashboard.Tests/TelemetryRepositoryTests/TelemetryLimitTests.cs new file mode 100644 index 00000000000..9f77e947968 --- /dev/null +++ b/tests/Aspire.Dashboard.Tests/TelemetryRepositoryTests/TelemetryLimitTests.cs @@ -0,0 +1,502 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Aspire.Dashboard.Otlp.Model; +using Aspire.Dashboard.Otlp.Storage; +using Google.Protobuf.Collections; +using OpenTelemetry.Proto.Logs.V1; +using OpenTelemetry.Proto.Metrics.V1; +using OpenTelemetry.Proto.Trace.V1; +using Xunit; +using static Aspire.Tests.Shared.Telemetry.TelemetryTestHelpers; + +namespace Aspire.Dashboard.Tests.TelemetryRepositoryTests; + +public class TelemetryLimitTests +{ + private static readonly DateTime s_testTime = new(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + + [Fact] + public void AddTraces_ExceedsResourceLimit_ReportsFailure() + { + var repository = CreateRepository(maxResourceCount: 3); + + for (var i = 0; i < 3; i++) + { + var addContext = new AddContext(); + repository.AddTraces(addContext, new RepeatedField + { + new ResourceSpans + { + Resource = CreateResource(name: $"app{i}"), + ScopeSpans = + { + new ScopeSpans + { + Scope = CreateScope(), + Spans = { CreateSpan("trace1", $"span{i}", s_testTime, s_testTime.AddMinutes(1)) } + } + } + } + }); + Assert.Equal(0, addContext.FailureCount); + } + + Assert.Equal(3, repository.GetResources().Count); + + // Adding a 4th resource should fail. + var failContext = new AddContext(); + repository.AddTraces(failContext, new RepeatedField + { + new ResourceSpans + { + Resource = CreateResource(name: "app-over-limit"), + ScopeSpans = + { + new ScopeSpans + { + Scope = CreateScope(), + Spans = { CreateSpan("trace2", "spanX", s_testTime, s_testTime.AddMinutes(1)) } + } + } + } + }); + + Assert.Equal(1, failContext.FailureCount); + Assert.Equal(0, failContext.SuccessCount); + Assert.Equal(3, repository.GetResources().Count); + } + + [Fact] + public void AddTraces_ExistingResourceAfterLimitReached_Succeeds() + { + var repository = CreateRepository(maxResourceCount: 2); + + // Add 2 resources to fill up the limit. + for (var i = 0; i < 2; i++) + { + var addContext = new AddContext(); + repository.AddTraces(addContext, new RepeatedField + { + new ResourceSpans + { + Resource = CreateResource(name: $"app{i}"), + ScopeSpans = + { + new ScopeSpans + { + Scope = CreateScope(), + Spans = { CreateSpan("trace1", $"span{i}", s_testTime, s_testTime.AddMinutes(1)) } + } + } + } + }); + Assert.Equal(0, addContext.FailureCount); + } + + // Adding data for an existing resource should still succeed. + var successContext = new AddContext(); + repository.AddTraces(successContext, new RepeatedField + { + new ResourceSpans + { + Resource = CreateResource(name: "app0"), + ScopeSpans = + { + new ScopeSpans + { + Scope = CreateScope(), + Spans = { CreateSpan("trace2", "spanNew", s_testTime, s_testTime.AddMinutes(2)) } + } + } + } + }); + + Assert.Equal(0, successContext.FailureCount); + Assert.Equal(1, successContext.SuccessCount); + } + + [Fact] + public void AddMetrics_ExceedsInstrumentLimit_ReportsFailure() + { + var repository = CreateRepository(); + + // Fill instruments up to the limit. + var metrics = new RepeatedField(); + for (var i = 0; i < TelemetryRepository.MaxInstrumentCount; i++) + { + metrics.Add(CreateSumMetric(metricName: $"metric{i}", startTime: s_testTime.AddMinutes(1))); + } + + var addContext = new AddContext(); + repository.AddMetrics(addContext, new RepeatedField + { + new ResourceMetrics + { + Resource = CreateResource(), + ScopeMetrics = + { + new ScopeMetrics + { + Scope = CreateScope(name: "test-meter"), + Metrics = { metrics } + } + } + } + }); + + Assert.Equal(0, addContext.FailureCount); + + var resources = repository.GetResources(); + var instruments = repository.GetInstrumentsSummaries(resources[0].ResourceKey); + Assert.Equal(TelemetryRepository.MaxInstrumentCount, instruments.Count); + + // Adding one more instrument should fail. + var failContext = new AddContext(); + repository.AddMetrics(failContext, new RepeatedField + { + new ResourceMetrics + { + Resource = CreateResource(), + ScopeMetrics = + { + new ScopeMetrics + { + Scope = CreateScope(name: "test-meter"), + Metrics = { CreateSumMetric(metricName: "over-limit-metric", startTime: s_testTime.AddMinutes(2)) } + } + } + } + }); + + Assert.Equal(1, failContext.FailureCount); + Assert.Equal(0, failContext.SuccessCount); + + instruments = repository.GetInstrumentsSummaries(resources[0].ResourceKey); + Assert.Equal(TelemetryRepository.MaxInstrumentCount, instruments.Count); + } + + [Fact] + public void AddLogs_ExceedsResourceLimit_FailureCountIsLogRecordCount() + { + var repository = CreateRepository(maxResourceCount: 1); + + // Fill the single resource slot. + var setupContext = new AddContext(); + repository.AddLogs(setupContext, new RepeatedField + { + new ResourceLogs + { + Resource = CreateResource(name: "app0"), + ScopeLogs = + { + new ScopeLogs + { + Scope = CreateScope("logger"), + LogRecords = { CreateLogRecord() } + } + } + } + }); + Assert.Equal(0, setupContext.FailureCount); + + // Attempt to add logs for a new resource with multiple scopes and records. + // FailureCount must equal total log records, not number of scopes. + var failContext = new AddContext(); + repository.AddLogs(failContext, new RepeatedField + { + new ResourceLogs + { + Resource = CreateResource(name: "app-over-limit"), + ScopeLogs = + { + new ScopeLogs + { + Scope = CreateScope("loggerA"), + LogRecords = + { + CreateLogRecord(message: "a1"), + CreateLogRecord(message: "a2"), + CreateLogRecord(message: "a3") + } + }, + new ScopeLogs + { + Scope = CreateScope("loggerB"), + LogRecords = + { + CreateLogRecord(message: "b1"), + CreateLogRecord(message: "b2") + } + } + } + } + }); + + Assert.Equal(5, failContext.FailureCount); + Assert.Equal(0, failContext.SuccessCount); + } + + [Fact] + public void AddMetrics_ExceedsResourceLimit_FailureCountIsDataPointCount() + { + var repository = CreateRepository(maxResourceCount: 1); + + // Fill the single resource slot. + var setupContext = new AddContext(); + repository.AddMetrics(setupContext, new RepeatedField + { + new ResourceMetrics + { + Resource = CreateResource(name: "app0"), + ScopeMetrics = + { + new ScopeMetrics + { + Scope = CreateScope(name: "meter"), + Metrics = { CreateSumMetric(metricName: "m0", startTime: s_testTime.AddMinutes(1)) } + } + } + } + }); + Assert.Equal(0, setupContext.FailureCount); + + // Attempt to add metrics for a new resource with multiple scopes and metrics. + // FailureCount must equal total data points, not number of metrics. + var failContext = new AddContext(); + repository.AddMetrics(failContext, new RepeatedField + { + new ResourceMetrics + { + Resource = CreateResource(name: "app-over-limit"), + ScopeMetrics = + { + new ScopeMetrics + { + Scope = CreateScope(name: "meterA"), + Metrics = + { + CreateSumMetric(metricName: "m1", startTime: s_testTime.AddMinutes(1)), + CreateSumMetric(metricName: "m2", startTime: s_testTime.AddMinutes(1)), + CreateSumMetric(metricName: "m3", startTime: s_testTime.AddMinutes(1)) + } + }, + new ScopeMetrics + { + Scope = CreateScope(name: "meterB"), + Metrics = + { + CreateSumMetric(metricName: "m4", startTime: s_testTime.AddMinutes(1)), + CreateSumMetric(metricName: "m5", startTime: s_testTime.AddMinutes(1)) + } + } + } + } + }); + + // Each CreateSumMetric produces 1 data point, so 5 metrics = 5 data points. + Assert.Equal(5, failContext.FailureCount); + Assert.Equal(0, failContext.SuccessCount); + } + + [Fact] + public void AddTraces_ExceedsResourceLimit_FailureCountIsSpanCount() + { + var repository = CreateRepository(maxResourceCount: 1); + + // Fill the single resource slot. + var setupContext = new AddContext(); + repository.AddTraces(setupContext, new RepeatedField + { + new ResourceSpans + { + Resource = CreateResource(name: "app0"), + ScopeSpans = + { + new ScopeSpans + { + Scope = CreateScope(), + Spans = { CreateSpan("trace1", "span0", s_testTime, s_testTime.AddMinutes(1)) } + } + } + } + }); + Assert.Equal(0, setupContext.FailureCount); + + // Attempt to add traces for a new resource with multiple scopes and spans. + // FailureCount must equal total spans, not number of scopes. + var failContext = new AddContext(); + repository.AddTraces(failContext, new RepeatedField + { + new ResourceSpans + { + Resource = CreateResource(name: "app-over-limit"), + ScopeSpans = + { + new ScopeSpans + { + Scope = CreateScope(), + Spans = + { + CreateSpan("trace2", "spanA1", s_testTime, s_testTime.AddMinutes(1)), + CreateSpan("trace2", "spanA2", s_testTime, s_testTime.AddMinutes(1)) + } + }, + new ScopeSpans + { + Scope = CreateScope(), + Spans = + { + CreateSpan("trace3", "spanB1", s_testTime, s_testTime.AddMinutes(1)) + } + } + } + } + }); + + Assert.Equal(3, failContext.FailureCount); + Assert.Equal(0, failContext.SuccessCount); + } + + [Fact] + public void AddLogs_ExceedsScopeLimit_ReportsFailure() + { + var repository = CreateRepository(); + + // Fill scopes up to the limit. + var scopeLogs = new RepeatedField(); + var rl = new ResourceLogs { Resource = CreateResource() }; + for (var i = 0; i < TelemetryRepository.MaxScopeCount; i++) + { + rl.ScopeLogs.Add(new ScopeLogs + { + Scope = CreateScope(name: $"logger{i}"), + LogRecords = { CreateLogRecord() } + }); + } + scopeLogs.Add(rl); + + var addContext = new AddContext(); + repository.AddLogs(addContext, scopeLogs); + Assert.Equal(0, addContext.FailureCount); + + // Adding one more scope should fail. + var failContext = new AddContext(); + repository.AddLogs(failContext, new RepeatedField + { + new ResourceLogs + { + Resource = CreateResource(), + ScopeLogs = + { + new ScopeLogs + { + Scope = CreateScope(name: "over-limit-logger"), + LogRecords = + { + CreateLogRecord(message: "a"), + CreateLogRecord(message: "b"), + CreateLogRecord(message: "c") + } + } + } + } + }); + + Assert.Equal(3, failContext.FailureCount); + Assert.Equal(0, failContext.SuccessCount); + } + + [Fact] + public void AddTraces_ExceedsScopeLimit_ReportsFailure() + { + var repository = CreateRepository(); + + // Fill scopes up to the limit. + var rs = new ResourceSpans { Resource = CreateResource() }; + for (var i = 0; i < TelemetryRepository.MaxScopeCount; i++) + { + rs.ScopeSpans.Add(new ScopeSpans + { + Scope = CreateScope(name: $"tracer{i}"), + Spans = { CreateSpan($"trace{i}", $"span{i}", s_testTime, s_testTime.AddMinutes(1)) } + }); + } + + var addContext = new AddContext(); + repository.AddTraces(addContext, new RepeatedField { rs }); + Assert.Equal(0, addContext.FailureCount); + + // Adding one more scope should fail. + var failContext = new AddContext(); + repository.AddTraces(failContext, new RepeatedField + { + new ResourceSpans + { + Resource = CreateResource(), + ScopeSpans = + { + new ScopeSpans + { + Scope = CreateScope(name: "over-limit-tracer"), + Spans = + { + CreateSpan("traceX", "spanX1", s_testTime, s_testTime.AddMinutes(1)), + CreateSpan("traceX", "spanX2", s_testTime, s_testTime.AddMinutes(2)) + } + } + } + } + }); + + Assert.Equal(2, failContext.FailureCount); + Assert.Equal(0, failContext.SuccessCount); + } + + [Fact] + public void AddMetrics_ExceedsScopeLimit_ReportsFailure() + { + var repository = CreateRepository(); + + // Fill scopes up to the limit. + var rm = new ResourceMetrics { Resource = CreateResource() }; + for (var i = 0; i < TelemetryRepository.MaxScopeCount; i++) + { + rm.ScopeMetrics.Add(new ScopeMetrics + { + Scope = CreateScope(name: $"meter{i}"), + Metrics = { CreateSumMetric(metricName: $"metric{i}", startTime: s_testTime.AddMinutes(1)) } + }); + } + + var addContext = new AddContext(); + repository.AddMetrics(addContext, new RepeatedField { rm }); + Assert.Equal(0, addContext.FailureCount); + + // Adding one more scope should fail. Each metric has 1 data point. + var failContext = new AddContext(); + repository.AddMetrics(failContext, new RepeatedField + { + new ResourceMetrics + { + Resource = CreateResource(), + ScopeMetrics = + { + new ScopeMetrics + { + Scope = CreateScope(name: "over-limit-meter"), + Metrics = + { + CreateSumMetric(metricName: "m1", startTime: s_testTime.AddMinutes(1)), + CreateSumMetric(metricName: "m2", startTime: s_testTime.AddMinutes(1)) + } + } + } + } + }); + + // 2 metrics × 1 data point each = 2 rejected data points. + Assert.Equal(2, failContext.FailureCount); + Assert.Equal(0, failContext.SuccessCount); + } +} diff --git a/tests/Shared/Hex1bAutomatorTestHelpers.cs b/tests/Shared/Hex1bAutomatorTestHelpers.cs index 0a94ffeeaf4..8fb6be3e3a9 100644 --- a/tests/Shared/Hex1bAutomatorTestHelpers.cs +++ b/tests/Shared/Hex1bAutomatorTestHelpers.cs @@ -514,7 +514,8 @@ internal static async Task AspireNewAsync( string projectName, SequenceCounter counter, AspireTemplate template = AspireTemplate.Starter, - bool useRedisCache = true) + bool useRedisCache = true, + bool useDevLocalhost = false) { var templateTimeout = TimeSpan.FromSeconds(60); @@ -625,7 +626,14 @@ await auto.WaitUntilAsync( s => new CellPatternSearcher().Find("Use *.dev.localhost URLs").Search(s).Count > 0, timeout: templateTimeout, description: "URLs prompt"); - await auto.EnterAsync(); // Accept default "No" + if (useDevLocalhost) + { + await auto.TypeAsync("y"); + } + else + { + await auto.EnterAsync(); // Accept default "No" + } // Step 6: Redis prompt (only Starter, JsReact, PythonReact) if (template is AspireTemplate.Starter or AspireTemplate.JsReact or AspireTemplate.PythonReact) diff --git a/tests/Shared/Telemetry/TelemetryTestHelpers.cs b/tests/Shared/Telemetry/TelemetryTestHelpers.cs index 16dcad85bd6..0b559ccb215 100644 --- a/tests/Shared/Telemetry/TelemetryTestHelpers.cs +++ b/tests/Shared/Telemetry/TelemetryTestHelpers.cs @@ -238,6 +238,7 @@ public static TelemetryRepository CreateRepository( int? maxSpanEventCount = null, int? maxTraceCount = null, int? maxLogCount = null, + int? maxResourceCount = null, TimeSpan? subscriptionMinExecuteInterval = null, ILoggerFactory? loggerFactory = null, PauseManager? pauseManager = null, @@ -268,6 +269,10 @@ public static TelemetryRepository CreateRepository( { options.MaxLogCount = maxLogCount.Value; } + if (maxResourceCount != null) + { + options.MaxResourceCount = maxResourceCount.Value; + } var repository = new TelemetryRepository( loggerFactory ?? NullLoggerFactory.Instance,