Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<PackageVersion Include="OneOf.SourceGenerator" Version="3.0.271" />
<PackageVersion Include="Polly" Version="8.7.0" />
<PackageVersion Include="Refit" Version="13.1.0" />
<PackageVersion Include="Refitter.MSBuild" Version="2.0.0" />
<PackageVersion Include="Serilog.AspNetCore" Version="10.0.0" />
<PackageVersion Include="Serilog.Expressions" Version="5.0.0" />
<PackageVersion Include="Serilog.Settings.Configuration" Version="10.0.1" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ public void DefineEndpoints(IEndpointRouteBuilder app)
.WithTags("Analysis")
.WithSummary("Run analysis")
.WithDescription("Starts the execution of an analysis script on the analysis service.")
.WithRequestValidation<WebRunAnalysisCommand>();
.WithRequestValidation<WebRunAnalysisCommand>()
.WithName("Analyses");
}

private static async Task<Accepted<WebRunAnalysisResponse>> TriggerAnalysis(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ public void DefineEndpoints(IEndpointRouteBuilder app)
app.MapPost("/api/context/clear", ClearContext)
.WithTags("Context")
.WithSummary("Clear analysis context")
.WithDescription("Clears all data from the current analysis context.");
.WithDescription("Clears all data from the current analysis context.")
.WithName("Clear");
}

private static NoContent ClearContext(IClearContextUseCase useCase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ public void DefineEndpoints(IEndpointRouteBuilder app)
.WithSummary("Generate classes for analysis context")
.WithDescription(
"Generates script classes based on the current data context and returns them as a stream."
);
)
.WithName("GenerateClasses");
}

private static async Task<Results<FileStreamHttpResult, ProblemHttpResult>> GenerateClasses(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ public void DefineEndpoints(IEndpointRouteBuilder app)
app.MapGet("/api/context", GetContext)
.WithTags("Context")
.WithSummary("Get analysis context")
.WithDescription("Retrieves the current data context from the analysis service.");
.WithDescription("Retrieves the current data context from the analysis service.")
.WithName("Context");
}

private static Ok<WebGetContextResponse> GetContext(IGetContextUseCase useCase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,24 +19,26 @@ public void DefineEndpoints(IEndpointRouteBuilder app)
app.MapGet("/api/context/graph-nodes", SearchNodes)
.WithTags("Context", "Graph")
.WithSummary("Search context nodes")
.WithDescription("Searches for context nodes based on a query string.");
.WithDescription("Searches for context nodes based on a query string.")
.WithName("GraphNodes");

app.MapGet("/api/context/graph-nodes/{nodeId}/neighbors", GetNeighbors)
.WithTags("Context", "Graph")
.WithSummary("Get node neighbors")
.WithDescription(
"Retrieves the immediate neighbors and edges for a specific context node."
);
)
.WithName("Neighbors");
}

private static Ok<WebContextGraphResponse> SearchNodes(
IGetContextGraphUseCase useCase,
[FromQuery] string? query,
[FromQuery] string query = "",
[FromQuery] int offset = 0,
[FromQuery] int limit = 10
)
{
var result = useCase.SearchNodes(query ?? string.Empty, offset, limit);
var result = useCase.SearchNodes(query, offset, limit);

return TypedResults.Ok(
new WebContextGraphResponse(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ public void DefineEndpoints(IEndpointRouteBuilder app)
.WithTags("Context")
.WithSummary("Link analysis context")
.WithDescription("Links the current analysis context using the provided linkers.")
.WithRequestValidation<WebLinkContextCommand>();
.WithRequestValidation<WebLinkContextCommand>()
.WithName("Link");
}

private static async Task<NoContent> LinkContext(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ public void DefineEndpoints(IEndpointRouteBuilder app)
.WithDescription(
"Loads data from files into the current analysis context using the provided loaders."
)
.WithRequestValidation<WebLoadContextCommand>();
.WithRequestValidation<WebLoadContextCommand>()
.WithName("Load");
}

private static async Task<NoContent> LoadContext(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public record WebInstalledPluginManifest(
string Name,
string? Description,
string? Author,
IEnumerable<object> ExtensionPoints
IEnumerable<WebPluginExtensionPoint> ExtensionPoints
)
{
public static WebInstalledPluginManifest Map(PluginManifest pluginManifest)
Expand All @@ -17,57 +17,69 @@ public static WebInstalledPluginManifest Map(PluginManifest pluginManifest)
pluginManifest.Name,
pluginManifest.Description,
pluginManifest.Author,
pluginManifest.ExtensionPoints.Select(MapExtensionPoint)
pluginManifest
.ExtensionPoints.Select(MapExtensionPoint)
.Where(extensionPoint => extensionPoint is not null)
.Cast<WebPluginExtensionPoint>()
);
}

private static object MapExtensionPoint(PluginExtensionPoint extensionPoint)
private static WebPluginExtensionPoint? MapExtensionPoint(PluginExtensionPoint extensionPoint)
{
return extensionPoint switch
{
HelperFunctionsPluginExtensionPoint helperFunctionsPluginExtensionPoint =>
new WebHelperFunctionsPluginExtensionPoint(
helperFunctionsPluginExtensionPoint.Kind,
helperFunctionsPluginExtensionPoint.EntryPoint,
helperFunctionsPluginExtensionPoint.Version
),
LinkerPluginExtensionPoint linkerPluginExtensionPoint =>
new WebLinkerPluginExtensionPoint(
linkerPluginExtensionPoint.Kind,
linkerPluginExtensionPoint.EntryPoint,
linkerPluginExtensionPoint.Version
),
LoaderPluginExtensionPoint loaderPluginExtensionPoint =>
new WebLoaderPluginExtensionPoint(
loaderPluginExtensionPoint.Kind,
loaderPluginExtensionPoint.EntryPoint,
loaderPluginExtensionPoint.Version
),

PluginBundleExtensionPoint pluginBundleExtensionPoint =>
new WebNestedPluginExtensionPoint(
pluginBundleExtensionPoint.Kind,
pluginBundleExtensionPoint.EntryPoint,
pluginBundleExtensionPoint.Version
),
ScriptGeneratorPluginExtensionPoint scriptGeneratorPluginExtensionPoint =>
new WebScriptGeneratorPluginExtensionPoint
{
EntryPoint = scriptGeneratorPluginExtensionPoint.EntryPoint,
Kind = scriptGeneratorPluginExtensionPoint.Kind,
Version = scriptGeneratorPluginExtensionPoint.Version,
Extension = scriptGeneratorPluginExtensionPoint.Extension,
Language = scriptGeneratorPluginExtensionPoint.Language,
},
new WebScriptGeneratorPluginExtensionPoint(
scriptGeneratorPluginExtensionPoint.Kind,
scriptGeneratorPluginExtensionPoint.EntryPoint,
scriptGeneratorPluginExtensionPoint.Version,
scriptGeneratorPluginExtensionPoint.Language,
scriptGeneratorPluginExtensionPoint.Extension
),
ScriptRunnerPluginExtensionPoint scriptRunnerPluginExtensionPoint =>
new WebScriptRunnerPluginExtensionPoint
{
Kind = scriptRunnerPluginExtensionPoint.Kind,
EntryPoint = scriptRunnerPluginExtensionPoint.EntryPoint,
Version = scriptRunnerPluginExtensionPoint.Version,
Language = scriptRunnerPluginExtensionPoint.Language,
Extension = scriptRunnerPluginExtensionPoint.Extension,
},
UiPluginExtensionPoint uiPluginExtensionPoint => new WebUiPluginExtensionPoint
{
EntryPoint = uiPluginExtensionPoint.EntryPoint,
Kind = uiPluginExtensionPoint.Kind,
Version = uiPluginExtensionPoint.Version,
RemoteName = uiPluginExtensionPoint.RemoteName,
RemoteEntry = uiPluginExtensionPoint.RemoteEntry,
Outlets = uiPluginExtensionPoint.Outlets.Select(o => new WebUiPluginOutlet
{
Type = o.Type,
ExposedModule = (o as RoutingOutlet)?.ExposedModule ?? string.Empty,
Path = (o as RoutingOutlet)?.Path,
Label = (o as RoutingOutlet)?.Label,
Nested = (o as RoutingOutlet)?.Nested,
ComponentName = (o as RoutingOutlet)?.ComponentName,
Icon = (o as SidePanelOutlet)?.Icon,
SupportedFileExtensions = (o as FilePreviewerOutlet)?.SupportedFileExtensions,
}),
},
_ => new WebPluginExtensionPoint
{
EntryPoint = extensionPoint.EntryPoint,
Kind = extensionPoint.Kind,
Version = extensionPoint.Version,
},
new WebScriptRunnerPluginExtensionPoint(
scriptRunnerPluginExtensionPoint.Kind,
scriptRunnerPluginExtensionPoint.EntryPoint,
scriptRunnerPluginExtensionPoint.Version,
scriptRunnerPluginExtensionPoint.Language,
scriptRunnerPluginExtensionPoint.Extension
),
UiPluginExtensionPoint uiPluginExtensionPoint => new WebUiPluginExtensionPoint(
uiPluginExtensionPoint.Kind,
uiPluginExtensionPoint.EntryPoint,
uiPluginExtensionPoint.Version,
uiPluginExtensionPoint.RemoteName,
uiPluginExtensionPoint.RemoteEntry,
uiPluginExtensionPoint.Outlets.Select(
WebInstalledPluginExtensionPointOutletBase.Map
)
),
_ => null,
};
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,73 @@
namespace ScriptBee.Analysis.Web.EndpointDefinitions.Plugins.Contracts;

public class WebPluginExtensionPoint
{
public string Kind { get; set; } = "";
public string EntryPoint { get; set; } = "";
public string Version { get; set; } = "";
}
using System.ComponentModel;
using System.Text.Json.Serialization;
using ScriptBee.Domain.Model.Plugins.Manifest;

namespace ScriptBee.Analysis.Web.EndpointDefinitions.Plugins.Contracts;

[JsonPolymorphic(TypeDiscriminatorPropertyName = "kind")]
[Description("Base class for plugin extension points")]
[JsonDerivedType(typeof(WebNestedPluginExtensionPoint), typeDiscriminator: PluginKind.Plugin)]
[JsonDerivedType(typeof(WebLoaderPluginExtensionPoint), typeDiscriminator: PluginKind.Loader)]
[JsonDerivedType(typeof(WebLinkerPluginExtensionPoint), typeDiscriminator: PluginKind.Linker)]
[JsonDerivedType(
typeof(WebScriptGeneratorPluginExtensionPoint),
typeDiscriminator: PluginKind.ScriptGenerator
)]
[JsonDerivedType(
typeof(WebScriptRunnerPluginExtensionPoint),
typeDiscriminator: PluginKind.ScriptRunner
)]
[JsonDerivedType(
typeof(WebHelperFunctionsPluginExtensionPoint),
typeDiscriminator: PluginKind.HelperFunctions
)]
[JsonDerivedType(typeof(WebUiPluginExtensionPoint), typeDiscriminator: PluginKind.Ui)]
public abstract record WebPluginExtensionPoint(
[property: JsonIgnore] string Kind,
string EntryPoint,
string Version
);

[Description("Represents a plugin from a bundle.")]
public record WebNestedPluginExtensionPoint(string Kind, string EntryPoint, string Version)
: WebPluginExtensionPoint(Kind, EntryPoint, Version);

[Description("Represents a loader plugin extension point.")]
public record WebLoaderPluginExtensionPoint(string Kind, string EntryPoint, string Version)
: WebPluginExtensionPoint(Kind, EntryPoint, Version);

[Description("Represents a linker plugin extension point.")]
public record WebLinkerPluginExtensionPoint(string Kind, string EntryPoint, string Version)
: WebPluginExtensionPoint(Kind, EntryPoint, Version);

[Description("Represents a script generator plugin extension point.")]
public record WebScriptGeneratorPluginExtensionPoint(
string Kind,
string EntryPoint,
string Version,
string Language,
string Extension
) : WebPluginExtensionPoint(Kind, EntryPoint, Version);

[Description("Represents a script runner plugin extension point.")]
public record WebScriptRunnerPluginExtensionPoint(
string Kind,
string EntryPoint,
string Version,
string Language,
string Extension
) : WebPluginExtensionPoint(Kind, EntryPoint, Version);

[Description("Represents a helper functions plugin extension point.")]
public record WebHelperFunctionsPluginExtensionPoint(string Kind, string EntryPoint, string Version)
: WebPluginExtensionPoint(Kind, EntryPoint, Version);

[Description("Represents a UI plugin extension point.")]
public record WebUiPluginExtensionPoint(
string Kind,
string EntryPoint,
string Version,
string RemoteName,
string RemoteEntry,
IEnumerable<WebInstalledPluginExtensionPointOutletBase> Outlets
) : WebPluginExtensionPoint(Kind, EntryPoint, Version);

This file was deleted.

This file was deleted.

This file was deleted.

Loading
Loading