@neo4j/graphql
Version:
A GraphQL to Cypher query execution layer for Neo4j and JavaScript GraphQL implementations
52 lines • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRelationshipPropertiesTypeDescription = getRelationshipPropertiesTypeDescription;
exports.withObjectType = withObjectType;
const graphql_1 = require("graphql");
const InterfaceEntity_1 = require("../../schema-model/entity/InterfaceEntity");
const RelationshipAdapter_1 = require("../../schema-model/relationship/model-adapters/RelationshipAdapter");
const to_compose_1 = require("../to-compose");
function getRelationshipPropertiesTypeDescription({ relationshipAdapter, propertiesObjectType, }) {
if (propertiesObjectType) {
return [
propertiesObjectType.getDescription(),
`* ${relationshipAdapter.source.name}.${relationshipAdapter.name}`,
].join("\n");
}
return `The edge properties for the following fields:\n* ${relationshipAdapter.source.name}.${relationshipAdapter.name}`;
}
function withObjectType({ entityAdapter, userDefinedFieldDirectives, userDefinedObjectDirectives, composer, }) {
if (entityAdapter instanceof RelationshipAdapter_1.RelationshipAdapter) {
// @relationshipProperties
const objectComposeFields = (0, to_compose_1.attributeAdapterToComposeFields)(Array.from(entityAdapter.attributes.values()), userDefinedFieldDirectives);
const composeObject = composer.createObjectTC({
name: entityAdapter.propertiesTypeName, // this is checked one layer above in execution
fields: objectComposeFields,
directives: (0, to_compose_1.graphqlDirectivesToCompose)(userDefinedObjectDirectives),
description: getRelationshipPropertiesTypeDescription({ relationshipAdapter: entityAdapter }),
});
return composeObject;
}
const nodeFields = (0, to_compose_1.attributeAdapterToComposeFields)(entityAdapter.objectFields, userDefinedFieldDirectives);
const composeNode = composer.createObjectTC({
name: entityAdapter.name,
fields: nodeFields,
description: entityAdapter.description,
directives: (0, to_compose_1.graphqlDirectivesToCompose)(userDefinedObjectDirectives),
interfaces: entityAdapter.compositeEntities.filter((e) => e instanceof InterfaceEntity_1.InterfaceEntity).map((e) => e.name),
});
// TODO: maybe split this global node logic?
if (entityAdapter.isGlobalNode()) {
composeNode.setField("id", {
type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLID),
resolve: (src) => {
const field = entityAdapter.globalIdField.name;
const value = src[field];
return entityAdapter.toGlobalId(value.toString());
},
});
composeNode.addInterface("Node");
}
return composeNode;
}
//# sourceMappingURL=object-type.js.map