From 0ab7301990253093b804254005a2482bfe82c953 Mon Sep 17 00:00:00 2001 From: Parsa Ghadimkhani Date: Fri, 30 May 2025 13:56:31 +0330 Subject: [PATCH 1/4] fix: keep underscores in enum names with numbers --- src/type-name-formatter.ts | 2 +- .../__snapshots__/basic.test.ts.snap | 23 ++++++++++++ tests/spec/enumIncludesNumber/basic.test.ts | 37 +++++++++++++++++++ tests/spec/enumIncludesNumber/schema.json | 13 +++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 tests/spec/enumIncludesNumber/__snapshots__/basic.test.ts.snap create mode 100644 tests/spec/enumIncludesNumber/basic.test.ts create mode 100644 tests/spec/enumIncludesNumber/schema.json diff --git a/src/type-name-formatter.ts b/src/type-name-formatter.ts index 4c5d3595..58743a86 100644 --- a/src/type-name-formatter.ts +++ b/src/type-name-formatter.ts @@ -32,7 +32,7 @@ export class TypeNameFormatter { } // constant names like LEFT_ARROW, RIGHT_FORWARD, ETC_KEY, _KEY_NUM_ - if (/^([A-Z_]{1,})$/g.test(name)) { + if (/^(?!\d)([A-Z0-9_]{1,})$/g.test(name)) { return lodash.compact([typePrefix, name, typeSuffix]).join("_"); } diff --git a/tests/spec/enumIncludesNumber/__snapshots__/basic.test.ts.snap b/tests/spec/enumIncludesNumber/__snapshots__/basic.test.ts.snap new file mode 100644 index 00000000..92e4c42e --- /dev/null +++ b/tests/spec/enumIncludesNumber/__snapshots__/basic.test.ts.snap @@ -0,0 +1,23 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`basic > use x-enumNames as the key for enum 1`] = ` +"/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export enum StringEnumWithoutKey { + VAL_1 = "VAL_1", + VAL_2 = "VAL_2", + VAL_3 = "VAL_3", + _1_VAL = "_1_VAL", +} +" +`; diff --git a/tests/spec/enumIncludesNumber/basic.test.ts b/tests/spec/enumIncludesNumber/basic.test.ts new file mode 100644 index 00000000..a58b9489 --- /dev/null +++ b/tests/spec/enumIncludesNumber/basic.test.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; + +import { afterAll, beforeAll, describe, expect, test } from "vitest"; + +import { generateApi } from "../../../src/index.js"; + +describe("basic", async () => { + let tmpdir = ""; + + beforeAll(async () => { + tmpdir = await fs.mkdtemp(path.join(os.tmpdir(), "swagger-typescript-api")); + }); + + afterAll(async () => { + await fs.rm(tmpdir, { recursive: true }); + }); + + test("use x-enumNames as the key for enum", async () => { + await generateApi({ + fileName: "schema", + input: path.resolve(import.meta.dirname, "schema.json"), + output: tmpdir, + silent: true, + enumNamesAsValues: false, + generateClient: false, + }); + + const content = await fs.readFile(path.join(tmpdir, "schema.ts"), { + encoding: "utf8", + }); + console.log(path.join(tmpdir, "schema.ts")); + + expect(content).toMatchSnapshot(); + }); +}); diff --git a/tests/spec/enumIncludesNumber/schema.json b/tests/spec/enumIncludesNumber/schema.json new file mode 100644 index 00000000..433670fd --- /dev/null +++ b/tests/spec/enumIncludesNumber/schema.json @@ -0,0 +1,13 @@ +{ + "openapi": "3.0.0", + "tags": [], + "servers": [], + "components": { + "schemas": { + "StringEnumWithoutKey": { + "type": "string", + "enum": ["VAL_1", "VAL_2", "VAL_3", "_1_VAL"] + } + } + } +} From c2dee04ef72f53cf41f66497579803d039cde01d Mon Sep 17 00:00:00 2001 From: Parsa Ghadimkhani Date: Sat, 7 Jun 2025 17:15:06 +0330 Subject: [PATCH 2/4] chore: add more use cases --- .../__snapshots__/basic.test.ts.snap | 5 ++++- tests/spec/enumIncludesNumber/schema.json | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/tests/spec/enumIncludesNumber/__snapshots__/basic.test.ts.snap b/tests/spec/enumIncludesNumber/__snapshots__/basic.test.ts.snap index 92e4c42e..2542a62e 100644 --- a/tests/spec/enumIncludesNumber/__snapshots__/basic.test.ts.snap +++ b/tests/spec/enumIncludesNumber/__snapshots__/basic.test.ts.snap @@ -13,11 +13,14 @@ exports[`basic > use x-enumNames as the key for enum 1`] = ` * --------------------------------------------------------------- */ -export enum StringEnumWithoutKey { +export enum StringEnumIncludesNumbersAndUnderscore { VAL_1 = "VAL_1", VAL_2 = "VAL_2", VAL_3 = "VAL_3", _1_VAL = "_1_VAL", + A_1_B_2_C_3 = "A_1_B_2_C_3", + _A_1_B_2_C_3 = "_A_1_B_2_C_3", + _1_A_2_B_3_C = "_1_A_2_B_3_C", } " `; diff --git a/tests/spec/enumIncludesNumber/schema.json b/tests/spec/enumIncludesNumber/schema.json index 433670fd..40ae9f46 100644 --- a/tests/spec/enumIncludesNumber/schema.json +++ b/tests/spec/enumIncludesNumber/schema.json @@ -4,9 +4,17 @@ "servers": [], "components": { "schemas": { - "StringEnumWithoutKey": { + "StringEnumIncludesNumbersAndUnderscore": { "type": "string", - "enum": ["VAL_1", "VAL_2", "VAL_3", "_1_VAL"] + "enum": [ + "VAL_1", + "VAL_2", + "VAL_3", + "_1_VAL", + "A_1_B_2_C_3", + "_A_1_B_2_C_3", + "_1_A_2_B_3_C" + ] } } } From 5c34f0f1d1a2133bab4a7493fc35c4fa98d58f62 Mon Sep 17 00:00:00 2001 From: Parsa Ghadimkhani Date: Sun, 8 Jun 2025 15:06:18 +0330 Subject: [PATCH 3/4] chore: add changeset --- .changeset/big-sheep-see.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/big-sheep-see.md diff --git a/.changeset/big-sheep-see.md b/.changeset/big-sheep-see.md new file mode 100644 index 00000000..1d4ce1cd --- /dev/null +++ b/.changeset/big-sheep-see.md @@ -0,0 +1,5 @@ +--- +"swagger-typescript-api": patch +--- + +Fix enum key generation for values like `ENUM_123_VALUE_456` From 5f1586ddf506d510aa82a78b39d7201dda7254fa Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Mon, 9 Jun 2025 01:34:11 +0900 Subject: [PATCH 4/4] Update .changeset/big-sheep-see.md --- .changeset/big-sheep-see.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/big-sheep-see.md b/.changeset/big-sheep-see.md index 1d4ce1cd..097a890d 100644 --- a/.changeset/big-sheep-see.md +++ b/.changeset/big-sheep-see.md @@ -2,4 +2,4 @@ "swagger-typescript-api": patch --- -Fix enum key generation for values like `ENUM_123_VALUE_456` +Fix enum key generation for values like `ENUM_123_VALUE_456`.