Skip to content

Commit

Permalink
[core] GraphQL: Exclude unions from filter generation
Browse files Browse the repository at this point in the history
  • Loading branch information
rexxars authored and saasen committed Feb 27, 2020
1 parent 586dde9 commit 36c9a10
Showing 1 changed file with 13 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,15 @@ function generateTypeFilters(types) {
!type.interfaces &&
!builtInTypeKeys.includes(type.type)
)

const unionTypes = types.filter(type => type.kind === 'Union').map(type => type.name)
const documentTypes = types.filter(
type => type.type === 'Object' && type.interfaces && type.interfaces.includes('Document')
)

const builtinTypeFilters = createBuiltinTypeFilters(builtinTypeValues)
const objectTypeFilters = createObjectTypeFilters(objectTypes)
const documentTypeFilters = createDocumentTypeFilters(documentTypes)
const objectTypeFilters = createObjectTypeFilters(objectTypes, {unionTypes})
const documentTypeFilters = createDocumentTypeFilters(documentTypes, {unionTypes})

return builtinTypeFilters.concat(objectTypeFilters).concat(documentTypeFilters)
}
Expand All @@ -49,19 +51,19 @@ function createBuiltinTypeFilters(builtinTypeValues) {
return builtinTypeValues.map(filterCreator => filterCreator())
}

function createObjectTypeFilters(objectTypes) {
function createObjectTypeFilters(objectTypes, options) {
return objectTypes.map(objectType => {
return {
name: `${objectType.name}Filter`,
kind: 'InputObject',
fields: createFieldFilters(objectType)
fields: createFieldFilters(objectType, options)
}
})
}

function createDocumentTypeFilters(documentTypes) {
function createDocumentTypeFilters(documentTypes, options) {
return documentTypes.map(documentType => {
const fields = getDocumentFilters().concat(createFieldFilters(documentType))
const fields = getDocumentFilters().concat(createFieldFilters(documentType, options))
return {
name: `${documentType.name}Filter`,
kind: 'InputObject',
Expand All @@ -70,9 +72,12 @@ function createDocumentTypeFilters(documentTypes) {
})
}

function createFieldFilters(objectType) {
function createFieldFilters(objectType, options) {
const {unionTypes} = options
return objectType.fields
.filter(field => field.type !== 'JSON' && field.kind !== 'List')
.filter(
field => field.type !== 'JSON' && field.kind !== 'List' && !unionTypes.includes(field.type)
)
.map(field => ({
fieldName: field.fieldName,
type: `${typeAliases[field.type] || field.type}Filter`,
Expand Down

0 comments on commit 36c9a10

Please sign in to comment.