UNPKG

@netlify/content-engine

Version:
85 lines 3.07 kB
"use strict"; 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