using System.Text; using Core; using Core.Events; using Core.Settings; using Core.Yaml; namespace Generator.Infrastructure.OpenApi.Builders; public class OpenApiJavascriptBuilder : AbstractBuilder { private readonly JavascriptConfig _config; public OpenApiJavascriptBuilder(JavascriptConfig config, DisplayEmitter emitter) : base(config.Invite, emitter) { _config = config; } /// 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); } /// public override void Build() => throw new InvalidOperationException("Why the heck do you want to compile javascript code ?"); /// /// Registers the generation of the openapi spec file /// 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); } }