Skip to content

Commit 6943ccf

Browse files
authored
Enum generation descriptions - allow for nulls/empty strings (#2393)
* fix: widens check condition for not appending enum description comment to nulls and empty strings too. Also using JSDoc style comment for enum description. * Rolled back the JSDoc comments to the original version * Expanded tests to ensure null and empty strings are handled correctly * Making the linter happy * changeset
1 parent cbd6436 commit 6943ccf

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

.changeset/fluffy-pumas-run.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"openapi-typescript": patch
3+
---
4+
5+
Now checking for null & empty string when generating enum description

packages/openapi-typescript/src/lib/ts.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ export const enumCache = new Map<string, ts.EnumDeclaration>();
268268
export function tsEnum(
269269
name: string,
270270
members: (string | number)[],
271-
metadata?: { name?: string; description?: string }[],
271+
metadata?: { name?: string; description?: string | null }[],
272272
options?: { export?: boolean; shouldCache?: boolean },
273273
) {
274274
let enumName = sanitizeMemberName(name);
@@ -352,7 +352,7 @@ function sanitizeMemberName(name: string) {
352352
}
353353

354354
/** Sanitize TS enum member expression */
355-
export function tsEnumMember(value: string | number, metadata: { name?: string; description?: string } = {}) {
355+
export function tsEnumMember(value: string | number, metadata: { name?: string; description?: string | null } = {}) {
356356
let name = metadata.name ?? String(value);
357357
if (!JS_PROPERTY_INDEX_RE.test(name)) {
358358
if (Number(name[0]) >= 0) {
@@ -388,16 +388,12 @@ export function tsEnumMember(value: string | number, metadata: { name?: string;
388388
member = ts.factory.createEnumMember(name, ts.factory.createStringLiteral(value));
389389
}
390390

391-
if (metadata.description === undefined) {
391+
const trimmedDescription = metadata.description?.trim();
392+
if (trimmedDescription === undefined || trimmedDescription === null || trimmedDescription === "") {
392393
return member;
393394
}
394395

395-
return ts.addSyntheticLeadingComment(
396-
member,
397-
ts.SyntaxKind.SingleLineCommentTrivia,
398-
" ".concat(metadata.description.trim()),
399-
true,
400-
);
396+
return ts.addSyntheticLeadingComment(member, ts.SyntaxKind.SingleLineCommentTrivia, ` ${trimmedDescription}`, true);
401397
}
402398

403399
/** Create an intersection type */

packages/openapi-typescript/test/lib/ts.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,11 @@ describe("tsEnum", () => {
278278
tsEnum(
279279
".Error.code.",
280280
[100, 101, 102],
281-
[{ name: "Unauthorized", description: "User is unauthorized" }, { name: "NotFound" }],
281+
[
282+
{ name: "Unauthorized", description: "User is unauthorized" },
283+
{ name: "NotFound", description: "" },
284+
{ name: "Value102", description: null },
285+
],
282286
),
283287
).trim(),
284288
).toBe(`enum ErrorCode {

0 commit comments

Comments
 (0)