From c473524e1d3d9635a2aa38b7c70f5345e805d2ee Mon Sep 17 00:00:00 2001 From: Florian Tatzky Date: Mon, 22 Jun 2020 09:31:02 +0200 Subject: [PATCH] Generate unions from oneOf return type Signed-off-by: Florian Tatzky --- packages/openapi-to-graphql/src/oas_3_tools.ts | 7 +++++++ packages/openapi-to-graphql/src/preprocessor.ts | 8 ++------ 2 files changed, 9 insertions(+), 6 deletions(-) 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 => {