@netlify/content-engine
Version:
85 lines • 3.07 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.addDerivedType = exports.clearDerivedTypes = exports.deleteFieldsOfDerivedTypes = void 0;
/**
* Derived types are types that make sense only when their base type exists
*
* Take this node for example:
* {
* internal: { type: 'Foo' },
* fields: {
* bar: "string",
* }
* }
*
* It will produce following types:
* Foo
* FooFields
*
* FooInputFilter
* FooSortInput
*
* FooFieldsInputFilter
* FooFieldsSortFilter
* etc
*
* Derived types:
* Foo: FooFields, FooInputFilter, FooSortInput
* FooFields: FooFieldsInputFilter, FooFieldsSortFilter
*
* Caveats:
* Only types created via inference are marked as derived. So if in the example above
* user explicitly defines `FooFields` type (via `createTypes` call) it won't be considered
* a derived type
*/
const graphql_compose_1 = require("graphql-compose");
const getDerivedTypes = ({ typeComposer, }) => {
const derivedTypes = typeComposer.getExtension(`derivedTypes`);
if (derivedTypes) {
return derivedTypes;
}
return new Set();
};
const deleteFieldsOfDerivedTypes = ({ typeComposer }) => {
const derivedTypes = getDerivedTypes({ typeComposer });
typeComposer.getFieldNames().forEach((fieldName) => {
const fieldType = typeComposer.getField(fieldName).type;
if (derivedTypes.has(fieldType.getTypeName())) {
typeComposer.removeField(fieldName);
}
});
};
exports.deleteFieldsOfDerivedTypes = deleteFieldsOfDerivedTypes;
const removeTypeFromSchemaComposer = ({ schemaComposer, typeComposer, }) => {
schemaComposer.delete(typeComposer.getTypeName());
schemaComposer.delete(typeComposer._gqType);
schemaComposer.delete(typeComposer);
};
const clearDerivedTypes = ({ schemaComposer, typeComposer, }) => {
const derivedTypes = getDerivedTypes({ typeComposer });
for (const typeName of derivedTypes.values()) {
const derivedTypeComposer = schemaComposer.getAnyTC(typeName);
(0, exports.clearDerivedTypes)({ schemaComposer, typeComposer: derivedTypeComposer });
removeTypeFromSchemaComposer({
schemaComposer,
typeComposer: derivedTypeComposer,
});
}
if (typeComposer instanceof graphql_compose_1.ObjectTypeComposer ||
typeComposer instanceof graphql_compose_1.InterfaceTypeComposer) {
const inputTypeComposer = typeComposer.getInputTypeComposer();
removeTypeFromSchemaComposer({
schemaComposer,
typeComposer: inputTypeComposer,
});
typeComposer.removeInputTypeComposer();
}
typeComposer.setExtension(`derivedTypes`, new Set());
};
exports.clearDerivedTypes = clearDerivedTypes;
const addDerivedType = ({ typeComposer, derivedTypeName, }) => {
const derivedTypes = getDerivedTypes({ typeComposer });
typeComposer.setExtension(`derivedTypes`, derivedTypes.add(derivedTypeName));
};
exports.addDerivedType = addDerivedType;
//# sourceMappingURL=derived-types.js.map
;