From 561f1468034b6f0e6aa59eab998cc0270d7ac953 Mon Sep 17 00:00:00 2001 From: craigmc08 Date: Tue, 16 Jul 2019 15:26:00 -0400 Subject: [PATCH] Sandbox refs inside of allOf schemas --- src/services/OpenAPIParser.ts | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/services/OpenAPIParser.ts b/src/services/OpenAPIParser.ts index 9d1a716d..2c43dfd1 100644 --- a/src/services/OpenAPIParser.ts +++ b/src/services/OpenAPIParser.ts @@ -198,18 +198,19 @@ export class OpenAPIParser { receiver.items = { ...receiver.items }; } - const allOfSchemas = schema.allOf.map(subSchema => { - const resolved = this.deref(subSchema, forceCircular); - const subRef = subSchema.$ref || undefined; - const subMerged = this.mergeAllOf(resolved, subRef, forceCircular); - receiver.parentRefs!.push(...(subMerged.parentRefs || [])); - return { - $ref: subRef, - schema: subMerged, - }; - }); + const originalRefCounts = { ...this._refCounter._counter }; + const originalRefCounter = this._refCounter; + + for (const rawSubSchema of schema.allOf) { + const resolved = this.deref(rawSubSchema, forceCircular); + + this._refCounter = new RefCounter(); + this._refCounter._counter = { ...originalRefCounts }; + + const subSchemaRef = rawSubSchema.$ref || undefined; + const subSchema = this.mergeAllOf(resolved, subSchemaRef, forceCircular); + receiver.parentRefs!.push(...(subSchema.parentRefs || [])); - for (const { $ref: subSchemaRef, schema: subSchema } of allOfSchemas) { if ( receiver.type !== subSchema.type && receiver.type !== undefined && @@ -262,6 +263,8 @@ export class OpenAPIParser { // receiver.title = JsonPointer.baseName(subSchemaRef); } } + + this._refCounter = originalRefCounter; } return receiver;