diff --git a/packages/openapi-to-graphql/src/oas_3_tools.ts b/packages/openapi-to-graphql/src/oas_3_tools.ts index 42900c2f..fdb4fd62 100644 --- a/packages/openapi-to-graphql/src/oas_3_tools.ts +++ b/packages/openapi-to-graphql/src/oas_3_tools.ts @@ -406,6 +406,13 @@ export function getSchemaTargetGraphQLType( schema: SchemaObject, data: PreprocessingData ): string | null { + if (schema.oneOf) { + return 'union' + } + + if (schema.allOf) { + return 'object' + } // CASE: object if (schema.type === 'object' || typeof schema.properties === 'object') { // TODO: additionalProperties is more like a flag than a type itself diff --git a/packages/openapi-to-graphql/src/preprocessor.ts b/packages/openapi-to-graphql/src/preprocessor.ts index b9d4acfc..1d63529f 100644 --- a/packages/openapi-to-graphql/src/preprocessor.ts +++ b/packages/openapi-to-graphql/src/preprocessor.ts @@ -1504,14 +1504,10 @@ function createDataDefFromOneOf( if ( oneOfData.allTargetGraphQLTypes.every(memberTargetGraphQLType => { return memberTargetGraphQLType === 'object' - }) && - oneOfData.allProperties.length > 0 // Redundant check + }) ) { // Ensure that parent schema is compatiable with oneOf - if ( - def.targetGraphQLType === null || - def.targetGraphQLType === 'object' - ) { + if (def.targetGraphQLType === 'union') { def.subDefinitions = [] collapsedSchema.oneOf.forEach(memberSchema => {