Ocelot-Social/backend/src/middleware/includedFieldsMiddleware.js
2019-05-23 19:23:03 +02:00

30 lines
940 B
JavaScript

import cloneDeep from 'lodash/cloneDeep'
const _includeFieldsRecursively = (selectionSet, includedFields) => {
if (!selectionSet) return
includedFields.forEach(includedField => {
selectionSet.selections.unshift({
kind: 'Field',
name: { kind: 'Name', value: includedField },
})
})
selectionSet.selections.forEach(selection => {
_includeFieldsRecursively(selection.selectionSet, includedFields)
})
}
const includeFieldsRecursively = includedFields => {
return (resolve, root, args, context, resolveInfo) => {
const copy = cloneDeep(resolveInfo)
copy.fieldNodes.forEach(fieldNode => {
_includeFieldsRecursively(fieldNode.selectionSet, includedFields)
})
return resolve(root, args, context, copy)
}
}
export default {
Query: includeFieldsRecursively(['id', 'createdAt', 'disabled', 'deleted']),
Mutation: includeFieldsRecursively(['id', 'createdAt', 'disabled', 'deleted']),
}