Skip to content

Commit 0066ac0

Browse files
committed
Docuemntation: definitions deduplication fix.
1 parent 6b4c69a commit 0066ac0

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

express-zod-api/src/documentation-helpers.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import wellKnownHeaders from "./well-known-headers.json";
5555

5656
interface ReqResCommons {
5757
makeRef: (
58-
key: object,
58+
key: object | string,
5959
subject: SchemaObject | ReferenceObject,
6060
name?: string,
6161
) => ReferenceObject;
@@ -406,8 +406,12 @@ const fixReferences = (
406406
if (isReferenceObject(entry) && !entry.$ref.startsWith("#/components")) {
407407
const actualName = entry.$ref.split("/").pop()!;
408408
const depiction = defs[actualName];
409-
if (depiction)
410-
entry.$ref = ctx.makeRef(depiction, ensureCompliance(depiction)).$ref;
409+
if (depiction) {
410+
entry.$ref = ctx.makeRef(
411+
depiction.id || JSON.stringify(depiction), // id is unique, serialization here is safe
412+
ensureCompliance(depiction),
413+
).$ref;
414+
}
411415
continue;
412416
}
413417
stack.push(...R.values(entry));

express-zod-api/src/documentation.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ interface DocumentationParams {
8686
export class Documentation extends OpenApiBuilder {
8787
readonly #lastSecuritySchemaIds = new Map<SecuritySchemeType, number>();
8888
readonly #lastOperationIdSuffixes = new Map<string, number>();
89-
readonly #references = new Map<object, string>();
89+
readonly #references = new Map<object | string, string>();
9090

9191
#makeRef(
92-
key: object,
92+
key: object | string,
9393
subject: SchemaObject | ReferenceObject,
9494
name = this.#references.get(key),
9595
): ReferenceObject {

0 commit comments

Comments
 (0)