graphql-mocks
Version:
Tools for setting up graphql test resolvers
56 lines (42 loc) • 1.66 kB
JavaScript
Object.defineProperty(exports, '__esModule', {
value: true
});
var graphql = require('graphql');
require('ramda');
var isEqual = require('../utils/is-equal.js');
var constants = require('./constants.js');
var field = require('./field.js');
class InterfaceFieldHighlighter {
constructor(targets) {
if (targets.length === 0) {
targets = [[constants.HIGHLIGHT_ALL, constants.HIGHLIGHT_ALL]];
}
this.targets = targets;
}
mark(schema) {
return InterfaceFieldHighlighter.expandTargets(schema, this.targets);
}
static expandTargets(schema, targets) {
const interfaceTypes = Object.values(schema.getTypeMap()).filter(graphql.isInterfaceType);
const fieldReferences = field.field(...targets).mark(schema);
const interfaceTypeNamesAndFields = interfaceTypes.flatMap(interfaceType => {
const interfaceName = interfaceType.name;
const interfaceFields = Object.values(interfaceType.getFields()).map(interfaceField => {
const interfaceFieldName = interfaceField.name;
return [interfaceName, interfaceFieldName];
});
return [...interfaceFields];
});
return interfaceTypeNamesAndFields.filter(interfaceFieldReference => {
const found = fieldReferences.find(allFieldReference => isEqual.isEqual(allFieldReference, interfaceFieldReference));
return Boolean(found);
});
}
}
const interfaceField = function type(...interfaceNames) {
return new InterfaceFieldHighlighter(interfaceNames);
};
exports.InterfaceFieldHighlighter = InterfaceFieldHighlighter;
exports.interfaceField = interfaceField;
//# sourceMappingURL=interface-field.js.map
;