diff --git a/.changeset/tender-ducks-own.md b/.changeset/tender-ducks-own.md new file mode 100644 index 000000000..216332119 --- /dev/null +++ b/.changeset/tender-ducks-own.md @@ -0,0 +1,5 @@ +--- +"openapi-typescript": patch +--- + +Do not add readonly on Typescript enum when the --immutable option is used. diff --git a/.gitignore b/.gitignore index 2521d44bf..07389397b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ dist node_modules packages/openapi-typescript/test/fixtures/cli-outputs/out + +# IntelliJ IDEA settings folder +/.idea diff --git a/packages/openapi-typescript/src/lib/ts.ts b/packages/openapi-typescript/src/lib/ts.ts index 6c8792567..6084744b0 100644 --- a/packages/openapi-typescript/src/lib/ts.ts +++ b/packages/openapi-typescript/src/lib/ts.ts @@ -230,7 +230,7 @@ export function tsEnum( name: string, members: (string | number)[], metadata?: { name?: string; description?: string }[], - options?: { readonly?: boolean; export?: boolean }, + options?: { export?: boolean }, ) { let enumName = name.replace(JS_ENUM_INVALID_CHARS_RE, (c) => { const last = c[c.length - 1]; @@ -244,10 +244,7 @@ export function tsEnum( enumName = `${enumName[0].toUpperCase()}${enumName.substring(1)}`; return ts.factory.createEnumDeclaration( /* modifiers */ options - ? tsModifiers({ - readonly: options.readonly ?? false, - export: options.export ?? false, - }) + ? tsModifiers({ export: options.export ?? false }) : undefined, /* name */ enumName, /* members */ members.map((value, i) => diff --git a/packages/openapi-typescript/src/transform/schema-object.ts b/packages/openapi-typescript/src/transform/schema-object.ts index 0b6892249..fc68bd737 100644 --- a/packages/openapi-typescript/src/transform/schema-object.ts +++ b/packages/openapi-typescript/src/transform/schema-object.ts @@ -126,7 +126,11 @@ export function transformSchemaObjectWithComposition( enumName, schemaObject.enum as (string | number)[], metadata, - { export: true, readonly: options.ctx.immutable }, + + { + export: true, + // readonly: TS enum do not support the readonly modifier + }, ); options.ctx.injectFooter.push(enumType); return ts.factory.createTypeReferenceNode(enumType.name); diff --git a/packages/openapi-typescript/test/lib/ts.test.ts b/packages/openapi-typescript/test/lib/ts.test.ts index d48654fd1..f647cab9f 100644 --- a/packages/openapi-typescript/test/lib/ts.test.ts +++ b/packages/openapi-typescript/test/lib/ts.test.ts @@ -98,6 +98,20 @@ describe("tsEnum", () => { }`); }); + test("with setting: export", () => { + expect( + astToString( + tsEnum("-my-color-", ["green", "red", "blue"], undefined, { + export: true, + }), + ).trim(), + ).toBe(`export enum MyColor { + green = "green", + red = "red", + blue = "blue" +}`); + }); + test("name from path", () => { expect( astToString(