Skip to content

Commit

Permalink
fix: schema fields builder stuck
Browse files Browse the repository at this point in the history
  • Loading branch information
Oprysk committed Sep 14, 2023
1 parent 0e38089 commit f0885ea
Showing 1 changed file with 21 additions and 6 deletions.
27 changes: 21 additions & 6 deletions src/services/models/Schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export class SchemaModel {

constraints: string[];

fields?: FieldModel[];
private _fields?: FieldModel[];
items?: SchemaModel;

oneOf?: SchemaModel[];
Expand All @@ -76,7 +76,7 @@ export class SchemaModel {
* When true forces dereferencing in allOfs even if circular
*/
constructor(
parser: OpenAPIParser,
private parser: OpenAPIParser,
schemaOrRef: Referenced<OpenAPISchema>,
pointer: string,
private options: RedocNormalizedOptions,
Expand Down Expand Up @@ -112,6 +112,23 @@ export class SchemaModel {
return this.type === type || (isArray(this.type) && this.type.includes(type));
}

get fields(): FieldModel[] | undefined {
if (this.isCircular) {
return undefined;
}

if (!this._fields && this.hasType('object')) {
this._fields = buildFields(
this.parser,
this.schema,
this.pointer,
this.options,
this.refsStack,
);
}
return this._fields;
}

init(parser: OpenAPIParser, isChild: boolean) {
const schema = this.schema;
this.isCircular = !!schema['x-circular-ref'];
Expand Down Expand Up @@ -190,11 +207,9 @@ export class SchemaModel {
return;
}

if (this.hasType('object')) {
this.fields = buildFields(parser, schema, this.pointer, this.options, this.refsStack);
} else if (this.hasType('array')) {
if (this.hasType('array')) {
if (isArray(schema.items) || isArray(schema.prefixItems)) {
this.fields = buildFields(parser, schema, this.pointer, this.options, this.refsStack);
this._fields = buildFields(parser, schema, this.pointer, this.options, this.refsStack);
} else if (schema.items) {
this.items = new SchemaModel(
parser,
Expand Down

0 comments on commit f0885ea

Please sign in to comment.