UNPKG

neo4j-driver-core

Version:
360 lines (359 loc) 12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isPathSegment = exports.PathSegment = exports.isPath = exports.Path = exports.isUnboundRelationship = exports.UnboundRelationship = exports.isRelationship = exports.Relationship = exports.isNode = exports.Node = void 0; var json_1 = require("./json"); var IDENTIFIER_PROPERTY_ATTRIBUTES = { value: true, enumerable: false, configurable: false, writable: false }; var NODE_IDENTIFIER_PROPERTY = '__isNode__'; var RELATIONSHIP_IDENTIFIER_PROPERTY = '__isRelationship__'; var UNBOUND_RELATIONSHIP_IDENTIFIER_PROPERTY = '__isUnboundRelationship__'; var PATH_IDENTIFIER_PROPERTY = '__isPath__'; var PATH_SEGMENT_IDENTIFIER_PROPERTY = '__isPathSegment__'; function hasIdentifierProperty(obj, property) { return obj != null && obj[property] === true; } /** * Class for Node Type. */ var Node = /** @class */ (function () { /** * @constructor * @protected * @param {NumberOrInteger} identity - Unique identity * @param {Array<string>} labels - Array for all labels * @param {Properties} properties - Map with node properties * @param {string} elementId - Node element identifier */ function Node(identity, labels, properties, elementId) { /** * Identity of the node. * @type {NumberOrInteger} * @deprecated use {@link Node#elementId} instead */ this.identity = identity; /** * Labels of the node. * @type {string[]} */ this.labels = labels; /** * Properties of the node. * @type {Properties} */ this.properties = properties; /** * The Node element identifier. * @type {string} */ this.elementId = _valueOrGetDefault(elementId, function () { return identity.toString(); }); } /** * @ignore */ Node.prototype.toString = function () { var s = '(' + this.elementId; for (var i = 0; i < this.labels.length; i++) { s += ':' + this.labels[i]; } var keys = Object.keys(this.properties); if (keys.length > 0) { s += ' {'; for (var i = 0; i < keys.length; i++) { if (i > 0) s += ','; s += keys[i] + ':' + (0, json_1.stringify)(this.properties[keys[i]]); } s += '}'; } s += ')'; return s; }; return Node; }()); exports.Node = Node; Object.defineProperty(Node.prototype, NODE_IDENTIFIER_PROPERTY, IDENTIFIER_PROPERTY_ATTRIBUTES); /** * Test if given object is an instance of {@link Node} class. * @param {Object} obj the object to test. * @return {boolean} `true` if given object is a {@link Node}, `false` otherwise. */ function isNode(obj) { return hasIdentifierProperty(obj, NODE_IDENTIFIER_PROPERTY); } exports.isNode = isNode; /** * Class for Relationship Type. */ var Relationship = /** @class */ (function () { /** * @constructor * @protected * @param {NumberOrInteger} identity - Unique identity * @param {NumberOrInteger} start - Identity of start Node * @param {NumberOrInteger} end - Identity of end Node * @param {string} type - Relationship type * @param {Properties} properties - Map with relationship properties * @param {string} elementId - Relationship element identifier * @param {string} startNodeElementId - Start Node element identifier * @param {string} endNodeElementId - End Node element identifier */ function Relationship(identity, start, end, type, properties, elementId, startNodeElementId, endNodeElementId) { /** * Identity of the relationship. * @type {NumberOrInteger} * @deprecated use {@link Relationship#elementId} instead */ this.identity = identity; /** * Identity of the start node. * @type {NumberOrInteger} * @deprecated use {@link Relationship#startNodeElementId} instead */ this.start = start; /** * Identity of the end node. * @type {NumberOrInteger} * @deprecated use {@link Relationship#endNodeElementId} instead */ this.end = end; /** * Type of the relationship. * @type {string} */ this.type = type; /** * Properties of the relationship. * @type {Properties} */ this.properties = properties; /** * The Relationship element identifier. * @type {string} */ this.elementId = _valueOrGetDefault(elementId, function () { return identity.toString(); }); /** * The Start Node element identifier. * @type {string} */ this.startNodeElementId = _valueOrGetDefault(startNodeElementId, function () { return start.toString(); }); /** * The End Node element identifier. * @type {string} */ this.endNodeElementId = _valueOrGetDefault(endNodeElementId, function () { return end.toString(); }); } /** * @ignore */ Relationship.prototype.toString = function () { var s = '(' + this.startNodeElementId + ')-[:' + this.type; var keys = Object.keys(this.properties); if (keys.length > 0) { s += ' {'; for (var i = 0; i < keys.length; i++) { if (i > 0) s += ','; s += keys[i] + ':' + (0, json_1.stringify)(this.properties[keys[i]]); } s += '}'; } s += ']->(' + this.endNodeElementId + ')'; return s; }; return Relationship; }()); exports.Relationship = Relationship; Object.defineProperty(Relationship.prototype, RELATIONSHIP_IDENTIFIER_PROPERTY, IDENTIFIER_PROPERTY_ATTRIBUTES); /** * Test if given object is an instance of {@link Relationship} class. * @param {Object} obj the object to test. * @return {boolean} `true` if given object is a {@link Relationship}, `false` otherwise. */ function isRelationship(obj) { return hasIdentifierProperty(obj, RELATIONSHIP_IDENTIFIER_PROPERTY); } exports.isRelationship = isRelationship; /** * Class for UnboundRelationship Type. * @access private */ var UnboundRelationship = /** @class */ (function () { /** * @constructor * @protected * @param {NumberOrInteger} identity - Unique identity * @param {string} type - Relationship type * @param {Properties} properties - Map with relationship properties * @param {string} elementId - Relationship element identifier */ function UnboundRelationship(identity, type, properties, elementId) { /** * Identity of the relationship. * @type {NumberOrInteger} * @deprecated use {@link UnboundRelationship#elementId} instead */ this.identity = identity; /** * Type of the relationship. * @type {string} */ this.type = type; /** * Properties of the relationship. * @type {Properties} */ this.properties = properties; /** * The Relationship element identifier. * @type {string} */ this.elementId = _valueOrGetDefault(elementId, function () { return identity.toString(); }); } /** * Bind relationship * * @protected * @deprecated use {@link UnboundRelationship#bindTo} instead * @param {Integer} start - Identity of start node * @param {Integer} end - Identity of end node * @return {Relationship} - Created relationship */ UnboundRelationship.prototype.bind = function (start, end) { return new Relationship(this.identity, start, end, this.type, this.properties, this.elementId); }; /** * Bind relationship * * @protected * @param {Node} start - Start Node * @param {Node} end - End Node * @return {Relationship} - Created relationship */ UnboundRelationship.prototype.bindTo = function (start, end) { return new Relationship(this.identity, start.identity, end.identity, this.type, this.properties, this.elementId, start.elementId, end.elementId); }; /** * @ignore */ UnboundRelationship.prototype.toString = function () { var s = '-[:' + this.type; var keys = Object.keys(this.properties); if (keys.length > 0) { s += ' {'; for (var i = 0; i < keys.length; i++) { if (i > 0) s += ','; s += keys[i] + ':' + (0, json_1.stringify)(this.properties[keys[i]]); } s += '}'; } s += ']->'; return s; }; return UnboundRelationship; }()); exports.UnboundRelationship = UnboundRelationship; Object.defineProperty(UnboundRelationship.prototype, UNBOUND_RELATIONSHIP_IDENTIFIER_PROPERTY, IDENTIFIER_PROPERTY_ATTRIBUTES); /** * Test if given object is an instance of {@link UnboundRelationship} class. * @param {Object} obj the object to test. * @return {boolean} `true` if given object is a {@link UnboundRelationship}, `false` otherwise. */ function isUnboundRelationship(obj) { return hasIdentifierProperty(obj, UNBOUND_RELATIONSHIP_IDENTIFIER_PROPERTY); } exports.isUnboundRelationship = isUnboundRelationship; /** * Class for PathSegment Type. */ var PathSegment = /** @class */ (function () { /** * @constructor * @protected * @param {Node} start - start node * @param {Relationship} rel - relationship that connects start and end node * @param {Node} end - end node */ function PathSegment(start, rel, end) { /** * Start node. * @type {Node} */ this.start = start; /** * Relationship. * @type {Relationship} */ this.relationship = rel; /** * End node. * @type {Node} */ this.end = end; } return PathSegment; }()); exports.PathSegment = PathSegment; Object.defineProperty(PathSegment.prototype, PATH_SEGMENT_IDENTIFIER_PROPERTY, IDENTIFIER_PROPERTY_ATTRIBUTES); /** * Test if given object is an instance of {@link PathSegment} class. * @param {Object} obj the object to test. * @return {boolean} `true` if given object is a {@link PathSegment}, `false` otherwise. */ function isPathSegment(obj) { return hasIdentifierProperty(obj, PATH_SEGMENT_IDENTIFIER_PROPERTY); } exports.isPathSegment = isPathSegment; /** * Class for Path Type. */ var Path = /** @class */ (function () { /** * @constructor * @protected * @param {Node} start - start node * @param {Node} end - end node * @param {Array<PathSegment>} segments - Array of Segments */ function Path(start, end, segments) { /** * Start node. * @type {Node} */ this.start = start; /** * End node. * @type {Node} */ this.end = end; /** * Segments. * @type {Array<PathSegment>} */ this.segments = segments; /** * Length of the segments. * @type {Number} */ this.length = segments.length; } return Path; }()); exports.Path = Path; Object.defineProperty(Path.prototype, PATH_IDENTIFIER_PROPERTY, IDENTIFIER_PROPERTY_ATTRIBUTES); /** * Test if given object is an instance of {@link Path} class. * @param {Object} obj the object to test. * @return {boolean} `true` if given object is a {@link Path}, `false` otherwise. */ function isPath(obj) { return hasIdentifierProperty(obj, PATH_IDENTIFIER_PROPERTY); } exports.isPath = isPath; function _valueOrGetDefault(value, getDefault) { return value === undefined || value === null ? getDefault() : value; }