From c21626d438cc62e9012da4399815a2b644ae4321 Mon Sep 17 00:00:00 2001 From: Romain Lenzotti Date: Thu, 23 Feb 2023 18:08:32 +0100 Subject: [PATCH] fix(cli-generate-swagger): fix CliYaml implementation --- .../src/services/CliDockerComposeYaml.ts | 23 +++++++++++++++++-- packages/cli-core/src/services/CliFs.ts | 4 ++++ packages/cli-core/src/services/CliYaml.ts | 19 +++------------ .../src/commands/GenerateSwaggerCmd.ts | 3 +-- 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/packages/cli-core/src/services/CliDockerComposeYaml.ts b/packages/cli-core/src/services/CliDockerComposeYaml.ts index 4f2ba93c7..0664cb847 100644 --- a/packages/cli-core/src/services/CliDockerComposeYaml.ts +++ b/packages/cli-core/src/services/CliDockerComposeYaml.ts @@ -2,18 +2,37 @@ import {Inject, Injectable} from "@tsed/di"; import {snakeCase} from "change-case"; import {CliYaml} from "./CliYaml"; import {setValue} from "@tsed/core"; +import {join} from "path"; +import {CliFs} from "./CliFs"; +import {ProjectPackageJson} from "./ProjectPackageJson"; @Injectable() export class CliDockerComposeYaml { @Inject() protected cliYaml: CliYaml; + @Inject() + protected fs: CliFs; + + @Inject() + protected projectPackageJson: ProjectPackageJson; + async read() { - return this.cliYaml.read("docker-compose.yml"); + const path = "docker-compose.yml"; + const file = !this.fs.exists(path) ? this.fs.findUpFile(this.projectPackageJson.dir, path) : path; + + if (file) { + return this.cliYaml.read("docker-compose.yml"); + } + + return {}; } async write(obj: any) { - return this.cliYaml.write("docker-compose.yml", obj); + const path = "docker-compose.yml"; + const file = this.fs.findUpFile(this.projectPackageJson.dir, path) || join(this.projectPackageJson.dir, path); + + return this.cliYaml.write(file, obj); } async addDatabaseService(name: string, database: string) { diff --git a/packages/cli-core/src/services/CliFs.ts b/packages/cli-core/src/services/CliFs.ts index 71f5516f5..ec82b5b4b 100644 --- a/packages/cli-core/src/services/CliFs.ts +++ b/packages/cli-core/src/services/CliFs.ts @@ -21,6 +21,10 @@ export class CliFs { return this.raw.readFile(file, encoding) as any; } + async writeJson(file: string | Buffer | number, data: any, options?: WriteFileOptions | string): Promise { + await this.raw.writeFile(file, JSON.stringify(data, null, 2), options || ({encoding: "utf8"} as any)); + } + writeFileSync(path: PathLike | number, data: any, options?: WriteFileOptions) { return this.raw.writeFileSync(path, data, options); } diff --git a/packages/cli-core/src/services/CliYaml.ts b/packages/cli-core/src/services/CliYaml.ts index 15f8a5fe0..6d7d51eab 100644 --- a/packages/cli-core/src/services/CliYaml.ts +++ b/packages/cli-core/src/services/CliYaml.ts @@ -1,34 +1,21 @@ import {Inject, Injectable} from "@tsed/di"; import JsYaml from "js-yaml"; -import {join} from "path"; import {CliFs} from "./CliFs"; -import {ProjectPackageJson} from "./ProjectPackageJson"; @Injectable() export class CliYaml { - @Inject() - protected projectPackageJson: ProjectPackageJson; - @Inject() protected fs: CliFs; async read(path: string) { - const file = !this.fs.exists(path) ? this.fs.findUpFile(this.projectPackageJson.dir, path) : path; - - if (file) { - const content = await this.fs.readFile(file, {encoding: "utf8"}); + const content = await this.fs.readFile(path, {encoding: "utf8"}); - return JsYaml.load(content); - } - - return {}; + return JsYaml.load(content); } async write(path: string, obj: any) { const content = JsYaml.dump(obj); - const file = this.fs.findUpFile(this.projectPackageJson.dir, path) || join(this.projectPackageJson.dir, path); - - return this.fs.writeFile(file, content, {encoding: "utf8"}); + return this.fs.writeFile(path, content, {encoding: "utf8"}); } } diff --git a/packages/cli-generate-swagger/src/commands/GenerateSwaggerCmd.ts b/packages/cli-generate-swagger/src/commands/GenerateSwaggerCmd.ts index d4f36964e..dc80d983d 100644 --- a/packages/cli-generate-swagger/src/commands/GenerateSwaggerCmd.ts +++ b/packages/cli-generate-swagger/src/commands/GenerateSwaggerCmd.ts @@ -92,7 +92,6 @@ export class GenerateSwaggerCmd implements CommandProvider { this.fs.ensureDirSync(path.dirname(fileJson)); - this.fs.writeFile(fileJson, JSON.stringify(spec, null, 2), {encoding: "utf8"}); - await this.cliYaml.write(fileYaml, spec); + await Promise.all([this.fs.writeJson(fileJson, spec), this.cliYaml.write(fileYaml, spec)]); } }