Skip to content

Commit 435cccd

Browse files
committed
fix: allOf and deref exit not only named refs
1 parent 14f8408 commit 435cccd

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

src/services/OpenAPIParser.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { COMPONENT_REGEXP, buildComponentComment } from './MarkdownRenderer';
99
import { RedocNormalizedOptions } from './RedocNormalizedOptions';
1010
import { appendToMdHeading } from '../utils/index';
1111

12-
export type MergedOpenAPISchema = OpenAPISchema & { namedParents?: string[] };
12+
export type MergedOpenAPISchema = OpenAPISchema & { parentRefs?: string[] };
1313

1414
/**
1515
* Helper class to keep track of visited references to avoid
@@ -166,7 +166,7 @@ export class OpenAPIParser {
166166
*/
167167
mergeAllOf(
168168
schema: OpenAPISchema,
169-
$ref: string,
169+
$ref?: string,
170170
forceCircular: boolean = false,
171171
): MergedOpenAPISchema {
172172
if (schema.allOf === undefined) {
@@ -176,14 +176,14 @@ export class OpenAPIParser {
176176
let receiver: MergedOpenAPISchema = {
177177
...schema,
178178
allOf: undefined,
179-
namedParents: [],
179+
parentRefs: [],
180180
};
181181

182-
const allOfSchemas = schema.allOf.map((subSchema, idx) => {
182+
const allOfSchemas = schema.allOf.map(subSchema => {
183183
const resolved = this.deref(subSchema, forceCircular);
184-
const subRef = subSchema.$ref || $ref + '/allOf/' + idx;
184+
const subRef = subSchema.$ref || undefined;
185185
const subMerged = this.mergeAllOf(resolved, subRef, forceCircular);
186-
receiver.namedParents!.push(...(subMerged.namedParents || []));
186+
receiver.parentRefs!.push(...(subMerged.parentRefs || []));
187187
return {
188188
$ref: subRef,
189189
schema: subMerged,
@@ -219,9 +219,9 @@ export class OpenAPIParser {
219219
receiver.required = (receiver.required || []).concat(subSchema.required);
220220
}
221221

222-
if (isNamedDefinition(subSchemaRef)) {
223-
receiver.namedParents!.push(subSchemaRef);
224-
if (receiver.title === undefined) {
222+
if (subSchemaRef) {
223+
receiver.parentRefs!.push(subSchemaRef);
224+
if (receiver.title === undefined && isNamedDefinition(subSchemaRef)) {
225225
receiver.title = JsonPointer.baseName(subSchemaRef);
226226
}
227227
}

src/services/models/Schema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export class SchemaModel {
6969

7070
parser.exitRef(schemaOrRef);
7171

72-
for (let $ref of this.schema.namedParents || []) {
72+
for (let $ref of this.schema.parentRefs || []) {
7373
// exit all the refs visited during allOf traverse
7474
parser.exitRef({ $ref });
7575
}

src/utils/openapi.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ export function langFromMime(contentType: string): string {
113113
return 'clike';
114114
}
115115

116-
export function isNamedDefinition(pointer: string): boolean {
117-
return /^#\/components\/schemas\/[^\/]+$/.test(pointer);
116+
export function isNamedDefinition(pointer?: string): boolean {
117+
return /^#\/components\/schemas\/[^\/]+$/.test(pointer || '');
118118
}
119119

120120
export function humanizeConstraints(schema: OpenAPISchema): string[] {

0 commit comments

Comments
 (0)