diff --git a/src/services/models/Schema.ts b/src/services/models/Schema.ts index 309133a753..1b9abfd09b 100644 --- a/src/services/models/Schema.ts +++ b/src/services/models/Schema.ts @@ -104,7 +104,7 @@ export class SchemaModel { this.constraints = humanizeConstraints(schema); this.displayType = this.type; this.displayFormat = this.format; - this.isPrimitive = isPrimitiveType(schema); + this.isPrimitive = isPrimitiveType(schema, this.type); this.default = schema.default; this.readOnly = !!schema.readOnly; this.writeOnly = !!schema.writeOnly; diff --git a/src/utils/__tests__/openapi.test.ts b/src/utils/__tests__/openapi.test.ts index 9e61c9080d..34e847d213 100644 --- a/src/utils/__tests__/openapi.test.ts +++ b/src/utils/__tests__/openapi.test.ts @@ -187,6 +187,17 @@ describe('Utils', () => { }; expect(isPrimitiveType(schema)).toEqual(false); }); + + it('should work with externally provided type', () => { + const schema = { + properties: { + a: { + type: 'string', + }, + }, + }; + expect(isPrimitiveType(schema, 'object')).toEqual(false); + }); }); describe('openapi mergeParams', () => { diff --git a/src/utils/openapi.ts b/src/utils/openapi.ts index 2aecb6459d..080d010f10 100644 --- a/src/utils/openapi.ts +++ b/src/utils/openapi.ts @@ -105,18 +105,18 @@ export function detectType(schema: OpenAPISchema): string { return 'any'; } -export function isPrimitiveType(schema: OpenAPISchema) { +export function isPrimitiveType(schema: OpenAPISchema, type: string | undefined = schema.type) { if (schema.oneOf !== undefined || schema.anyOf !== undefined) { return false; } - if (schema.type === 'object') { + if (type === 'object') { return schema.properties !== undefined ? Object.keys(schema.properties).length === 0 : schema.additionalProperties === undefined; } - if (schema.type === 'array') { + if (type === 'array') { if (schema.items === undefined) { return true; }