UNPKG

@neo4j/graphql

Version:

A GraphQL to Cypher query execution layer for Neo4j and JavaScript GraphQL implementations

91 lines 3.85 kB
"use strict"; /* * Copyright (c) "Neo4j" * Neo4j Sweden AB [http://neo4j.com] * * This file is part of Neo4j. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PropertyInputField = void 0; const cypher_builder_1 = __importDefault(require("@neo4j/cypher-builder")); const InputField_1 = require("./InputField"); /** Input field from a property, * given an inputVariable it will generate a set operation from a property of that variable * * ```cypher * CREATE (var0:Movie) * SET * this.id = var0.id * ``` */ class PropertyInputField extends InputField_1.InputField { constructor({ attribute, attachedTo }) { super(attribute.name, attachedTo); this.attribute = attribute; } getChildren() { return []; } getSetParams(queryASTContext, inputVariable) { const target = this.getTarget(queryASTContext); if (!inputVariable) { throw new Error("Transpile Error: No input variable found"); } const rightVariable = this.getVariablePath(queryASTContext, inputVariable); const leftExpr = target.property(this.attribute.databaseName); const rightExpr = this.coerceReference(rightVariable); const setField = [leftExpr, rightExpr]; return [setField]; } getVariablePath(queryASTContext, variable) { const path = this.attachedTo === "node" ? "node" : "edge"; if (queryASTContext.relationship) { return variable.property(path).property(this.attribute.name); } return variable.property(this.attribute.name); } coerceReference(variable) { if (this.attribute.typeHelper.isSpatial()) { if (!this.attribute.typeHelper.isList()) { return cypher_builder_1.default.point(variable); } const comprehensionVar = new cypher_builder_1.default.Variable(); const mapPoint = cypher_builder_1.default.point(comprehensionVar); return new cypher_builder_1.default.ListComprehension(comprehensionVar, variable).map(mapPoint); } if (this.attribute.typeHelper.isDateTime()) { if (!this.attribute.typeHelper.isList()) { return cypher_builder_1.default.datetime(variable); } const comprehensionVar = new cypher_builder_1.default.Variable(); const mapDateTime = cypher_builder_1.default.datetime(comprehensionVar); return new cypher_builder_1.default.ListComprehension(comprehensionVar, variable).map(mapDateTime); } if (this.attribute.typeHelper.isTime()) { if (!this.attribute.typeHelper.isList()) { return cypher_builder_1.default.time(variable); } const comprehensionVar = new cypher_builder_1.default.Variable(); const mapTime = cypher_builder_1.default.time(comprehensionVar); return new cypher_builder_1.default.ListComprehension(comprehensionVar, variable).map(mapTime); } return variable; } } exports.PropertyInputField = PropertyInputField; //# sourceMappingURL=PropertyInputField.js.map