Files
api-generator/Generator/Infrastructure/OpenApi/Builders/OpenApiJavascriptBuilder.cs
2025-10-11 13:08:09 +02:00

63 lines
2.1 KiB
C#

using System.Text;
using Core;
using Core.Events;
using Core.Settings;
using Core.Yaml;
namespace Generator.Infrastructure.OpenApi.Builders;
public class OpenApiJavascriptBuilder : AbstractBuilder<OpenApiYaml>
{
private readonly JavascriptConfig _config;
public OpenApiJavascriptBuilder(JavascriptConfig config, DisplayEmitter emitter)
: base(config.Invite, emitter)
{
_config = config;
}
///<inheritdoc/>
public override void Generate()
{
CheckForNullSpec();
GenerateOpenApi();
var outputFolder = new Location([_config.DockerRoot, _config.ClientFolder]);
var specFile = new Location([_config.DockerRoot, _config.OpenApiSpecFile()]).ToString();
var stringBuilder = new StringBuilder();
stringBuilder
.Append($"docker run --rm -it -v {_config.LocalRoot}:{_config.DockerRoot} {_config.BuildImage} /bin/sh -c '")
.Append($"npm run prepare-workspace -- --apiName={_config.PackageName} --apiVersion={_config.OpenApiVersion} ")
.Append($"--apiFile={specFile} --registry={_config.Registry} && ")
.Append("npm run package && ")
.Append($"mkdir -p {outputFolder} && ")
.Append($"cp -r dist/* {outputFolder}'");
var command = stringBuilder.ToString();
Executor.Register(command);
}
///<inheritdoc/>
public override void Build()
=> throw new InvalidOperationException("Why the heck do you want to compile javascript code ?");
/// <summary>
/// Registers the generation of the openapi spec file
/// </summary>
private void GenerateOpenApi()
{
CheckForNullSpec();
var specFile = new Location([_config.DockerRoot, _config.SpecFile]);
var output = new Location([_config.DockerRoot, _config.OpenApiFolder()]);
var command = $"docker run --rm -it -v {_config.LocalRoot}:{_config.DockerRoot} {_config.GenerationImage} " +
$"generate -g openapi-yaml -i {specFile} -o {output}";
Executor.Register(command);
}
}