neo4j-driver-bolt-connection
Version:
Implements the connection with the Neo4j Database using the Bolt Protocol
308 lines (307 loc) • 15.4 kB
JavaScript
;
/**
* Copyright (c) "Neo4j"
* Neo4j Sweden AB [https://neo4j.com]
*
* 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 __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var neo4j_driver_core_1 = require("neo4j-driver-core");
var packstream_1 = require("../packstream");
var transformer_1 = require("./transformer");
var temporal_factory_1 = require("./temporal-factory");
var bolt_protocol_v1_transformer_1 = __importDefault(require("./bolt-protocol-v1.transformer"));
var _a = neo4j_driver_core_1.internal.temporalUtil, dateToEpochDay = _a.dateToEpochDay, localDateTimeToEpochSecond = _a.localDateTimeToEpochSecond, localTimeToNanoOfDay = _a.localTimeToNanoOfDay;
var POINT_2D = 0x58;
var POINT_2D_STRUCT_SIZE = 3;
var POINT_3D = 0x59;
var POINT_3D_STRUCT_SIZE = 4;
var DURATION = 0x45;
var DURATION_STRUCT_SIZE = 4;
var LOCAL_TIME = 0x74;
var LOCAL_TIME_STRUCT_SIZE = 1;
var TIME = 0x54;
var TIME_STRUCT_SIZE = 2;
var DATE = 0x44;
var DATE_STRUCT_SIZE = 1;
var LOCAL_DATE_TIME = 0x64;
var LOCAL_DATE_TIME_STRUCT_SIZE = 2;
var DATE_TIME_WITH_ZONE_OFFSET = 0x46;
var DATE_TIME_WITH_ZONE_OFFSET_STRUCT_SIZE = 3;
var DATE_TIME_WITH_ZONE_ID = 0x66;
var DATE_TIME_WITH_ZONE_ID_STRUCT_SIZE = 3;
/**
* Creates the Point2D Transformer
* @returns {TypeTransformer}
*/
function createPoint2DTransformer() {
return new transformer_1.TypeTransformer({
signature: POINT_2D,
isTypeInstance: function (point) { return (0, neo4j_driver_core_1.isPoint)(point) && (point.z === null || point.z === undefined); },
toStructure: function (point) { return new packstream_1.structure.Structure(POINT_2D, [
(0, neo4j_driver_core_1.int)(point.srid),
point.x,
point.y
]); },
fromStructure: function (struct) {
packstream_1.structure.verifyStructSize('Point2D', POINT_2D_STRUCT_SIZE, struct.size);
var _a = __read(struct.fields, 3), srid = _a[0], x = _a[1], y = _a[2];
return new neo4j_driver_core_1.Point(srid, x, y, undefined // z
);
}
});
}
/**
* Creates the Point3D Transformer
* @returns {TypeTransformer}
*/
function createPoint3DTransformer() {
return new transformer_1.TypeTransformer({
signature: POINT_3D,
isTypeInstance: function (point) { return (0, neo4j_driver_core_1.isPoint)(point) && point.z !== null && point.z !== undefined; },
toStructure: function (point) { return new packstream_1.structure.Structure(POINT_3D, [
(0, neo4j_driver_core_1.int)(point.srid),
point.x,
point.y,
point.z
]); },
fromStructure: function (struct) {
packstream_1.structure.verifyStructSize('Point3D', POINT_3D_STRUCT_SIZE, struct.size);
var _a = __read(struct.fields, 4), srid = _a[0], x = _a[1], y = _a[2], z = _a[3];
return new neo4j_driver_core_1.Point(srid, x, y, z);
}
});
}
/**
* Creates the Duration Transformer
* @returns {TypeTransformer}
*/
function createDurationTransformer() {
return new transformer_1.TypeTransformer({
signature: DURATION,
isTypeInstance: neo4j_driver_core_1.isDuration,
toStructure: function (value) {
var months = (0, neo4j_driver_core_1.int)(value.months);
var days = (0, neo4j_driver_core_1.int)(value.days);
var seconds = (0, neo4j_driver_core_1.int)(value.seconds);
var nanoseconds = (0, neo4j_driver_core_1.int)(value.nanoseconds);
return new packstream_1.structure.Structure(DURATION, [months, days, seconds, nanoseconds]);
},
fromStructure: function (struct) {
packstream_1.structure.verifyStructSize('Duration', DURATION_STRUCT_SIZE, struct.size);
var _a = __read(struct.fields, 4), months = _a[0], days = _a[1], seconds = _a[2], nanoseconds = _a[3];
return new neo4j_driver_core_1.Duration(months, days, seconds, nanoseconds);
}
});
}
/**
* Creates the LocalTime Transformer
* @param {Object} param
* @param {boolean} param.disableLosslessIntegers Disables lossless integers
* @param {boolean} param.useBigInt Uses BigInt instead of number or Integer
* @returns {TypeTransformer}
*/
function createLocalTimeTransformer(_a) {
var disableLosslessIntegers = _a.disableLosslessIntegers, useBigInt = _a.useBigInt;
return new transformer_1.TypeTransformer({
signature: LOCAL_TIME,
isTypeInstance: neo4j_driver_core_1.isLocalTime,
toStructure: function (value) {
var nanoOfDay = localTimeToNanoOfDay(value.hour, value.minute, value.second, value.nanosecond);
return new packstream_1.structure.Structure(LOCAL_TIME, [nanoOfDay]);
},
fromStructure: function (struct) {
packstream_1.structure.verifyStructSize('LocalTime', LOCAL_TIME_STRUCT_SIZE, struct.size);
var _a = __read(struct.fields, 1), nanoOfDay = _a[0];
var result = (0, temporal_factory_1.nanoOfDayToLocalTime)(nanoOfDay);
return convertIntegerPropsIfNeeded(result, disableLosslessIntegers, useBigInt);
}
});
}
/**
* Creates the Time Transformer
* @param {Object} param
* @param {boolean} param.disableLosslessIntegers Disables lossless integers
* @param {boolean} param.useBigInt Uses BigInt instead of number or Integer
* @returns {TypeTransformer}
*/
function createTimeTransformer(_a) {
var disableLosslessIntegers = _a.disableLosslessIntegers, useBigInt = _a.useBigInt;
return new transformer_1.TypeTransformer({
signature: TIME,
isTypeInstance: neo4j_driver_core_1.isTime,
toStructure: function (value) {
var nanoOfDay = localTimeToNanoOfDay(value.hour, value.minute, value.second, value.nanosecond);
var offsetSeconds = (0, neo4j_driver_core_1.int)(value.timeZoneOffsetSeconds);
return new packstream_1.structure.Structure(TIME, [nanoOfDay, offsetSeconds]);
},
fromStructure: function (struct) {
packstream_1.structure.verifyStructSize('Time', TIME_STRUCT_SIZE, struct.size);
var _a = __read(struct.fields, 2), nanoOfDay = _a[0], offsetSeconds = _a[1];
var localTime = (0, temporal_factory_1.nanoOfDayToLocalTime)(nanoOfDay);
var result = new neo4j_driver_core_1.Time(localTime.hour, localTime.minute, localTime.second, localTime.nanosecond, offsetSeconds);
return convertIntegerPropsIfNeeded(result, disableLosslessIntegers, useBigInt);
}
});
}
/**
* Creates the Date Transformer
* @param {Object} param
* @param {boolean} param.disableLosslessIntegers Disables lossless integers
* @param {boolean} param.useBigInt Uses BigInt instead of number or Integer
* @returns {TypeTransformer}
*/
function createDateTransformer(_a) {
var disableLosslessIntegers = _a.disableLosslessIntegers, useBigInt = _a.useBigInt;
return new transformer_1.TypeTransformer({
signature: DATE,
isTypeInstance: neo4j_driver_core_1.isDate,
toStructure: function (value) {
var epochDay = dateToEpochDay(value.year, value.month, value.day);
return new packstream_1.structure.Structure(DATE, [epochDay]);
},
fromStructure: function (struct) {
packstream_1.structure.verifyStructSize('Date', DATE_STRUCT_SIZE, struct.size);
var _a = __read(struct.fields, 1), epochDay = _a[0];
var result = (0, temporal_factory_1.epochDayToDate)(epochDay);
return convertIntegerPropsIfNeeded(result, disableLosslessIntegers, useBigInt);
}
});
}
/**
* Creates the LocalDateTime Transformer
* @param {Object} param
* @param {boolean} param.disableLosslessIntegers Disables lossless integers
* @param {boolean} param.useBigInt Uses BigInt instead of number or Integer
* @returns {TypeTransformer}
*/
function createLocalDateTimeTransformer(_a) {
var disableLosslessIntegers = _a.disableLosslessIntegers, useBigInt = _a.useBigInt;
return new transformer_1.TypeTransformer({
signature: LOCAL_DATE_TIME,
isTypeInstance: neo4j_driver_core_1.isLocalDateTime,
toStructure: function (value) {
var epochSecond = localDateTimeToEpochSecond(value.year, value.month, value.day, value.hour, value.minute, value.second, value.nanosecond);
var nano = (0, neo4j_driver_core_1.int)(value.nanosecond);
return new packstream_1.structure.Structure(LOCAL_DATE_TIME, [epochSecond, nano]);
},
fromStructure: function (struct) {
packstream_1.structure.verifyStructSize('LocalDateTime', LOCAL_DATE_TIME_STRUCT_SIZE, struct.size);
var _a = __read(struct.fields, 2), epochSecond = _a[0], nano = _a[1];
var result = (0, temporal_factory_1.epochSecondAndNanoToLocalDateTime)(epochSecond, nano);
return convertIntegerPropsIfNeeded(result, disableLosslessIntegers, useBigInt);
}
});
}
/**
* Creates the DateTime with ZoneId Transformer
* @param {Object} param
* @param {boolean} param.disableLosslessIntegers Disables lossless integers
* @param {boolean} param.useBigInt Uses BigInt instead of number or Integer
* @returns {TypeTransformer}
*/
function createDateTimeWithZoneIdTransformer(_a) {
var disableLosslessIntegers = _a.disableLosslessIntegers, useBigInt = _a.useBigInt;
return new transformer_1.TypeTransformer({
signature: DATE_TIME_WITH_ZONE_ID,
isTypeInstance: function (object) { return (0, neo4j_driver_core_1.isDateTime)(object) && object.timeZoneId != null; },
toStructure: function (value) {
var epochSecond = localDateTimeToEpochSecond(value.year, value.month, value.day, value.hour, value.minute, value.second, value.nanosecond);
var nano = (0, neo4j_driver_core_1.int)(value.nanosecond);
var timeZoneId = value.timeZoneId;
return new packstream_1.structure.Structure(DATE_TIME_WITH_ZONE_ID, [epochSecond, nano, timeZoneId]);
},
fromStructure: function (struct) {
packstream_1.structure.verifyStructSize('DateTimeWithZoneId', DATE_TIME_WITH_ZONE_ID_STRUCT_SIZE, struct.size);
var _a = __read(struct.fields, 3), epochSecond = _a[0], nano = _a[1], timeZoneId = _a[2];
var localDateTime = (0, temporal_factory_1.epochSecondAndNanoToLocalDateTime)(epochSecond, nano);
var result = new neo4j_driver_core_1.DateTime(localDateTime.year, localDateTime.month, localDateTime.day, localDateTime.hour, localDateTime.minute, localDateTime.second, localDateTime.nanosecond, null, timeZoneId);
return convertIntegerPropsIfNeeded(result, disableLosslessIntegers, useBigInt);
}
});
}
/**
* Creates the DateTime with Offset Transformer
* @param {Object} param
* @param {boolean} param.disableLosslessIntegers Disables lossless integers
* @param {boolean} param.useBigInt Uses BigInt instead of number or Integer
* @returns {TypeTransformer}
*/
function createDateTimeWithOffsetTransformer(_a) {
var disableLosslessIntegers = _a.disableLosslessIntegers, useBigInt = _a.useBigInt;
return new transformer_1.TypeTransformer({
signature: DATE_TIME_WITH_ZONE_OFFSET,
isTypeInstance: function (object) { return (0, neo4j_driver_core_1.isDateTime)(object) && object.timeZoneId == null; },
toStructure: function (value) {
var epochSecond = localDateTimeToEpochSecond(value.year, value.month, value.day, value.hour, value.minute, value.second, value.nanosecond);
var nano = (0, neo4j_driver_core_1.int)(value.nanosecond);
var timeZoneOffsetSeconds = (0, neo4j_driver_core_1.int)(value.timeZoneOffsetSeconds);
return new packstream_1.structure.Structure(DATE_TIME_WITH_ZONE_OFFSET, [epochSecond, nano, timeZoneOffsetSeconds]);
},
fromStructure: function (struct) {
packstream_1.structure.verifyStructSize('DateTimeWithZoneOffset', DATE_TIME_WITH_ZONE_OFFSET_STRUCT_SIZE, struct.size);
var _a = __read(struct.fields, 3), epochSecond = _a[0], nano = _a[1], timeZoneOffsetSeconds = _a[2];
var localDateTime = (0, temporal_factory_1.epochSecondAndNanoToLocalDateTime)(epochSecond, nano);
var result = new neo4j_driver_core_1.DateTime(localDateTime.year, localDateTime.month, localDateTime.day, localDateTime.hour, localDateTime.minute, localDateTime.second, localDateTime.nanosecond, timeZoneOffsetSeconds, null);
return convertIntegerPropsIfNeeded(result, disableLosslessIntegers, useBigInt);
}
});
}
function convertIntegerPropsIfNeeded(obj, disableLosslessIntegers, useBigInt) {
if (!disableLosslessIntegers && !useBigInt) {
return obj;
}
var convert = function (value) {
return useBigInt ? value.toBigInt() : value.toNumberOrInfinity();
};
var clone = Object.create(Object.getPrototypeOf(obj));
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop) === true) {
var value = obj[prop];
clone[prop] = (0, neo4j_driver_core_1.isInt)(value) ? convert(value) : value;
}
}
Object.freeze(clone);
return clone;
}
exports.default = __assign(__assign({}, bolt_protocol_v1_transformer_1.default), { createPoint2DTransformer: createPoint2DTransformer, createPoint3DTransformer: createPoint3DTransformer, createDurationTransformer: createDurationTransformer, createLocalTimeTransformer: createLocalTimeTransformer, createTimeTransformer: createTimeTransformer, createDateTransformer: createDateTransformer, createLocalDateTimeTransformer: createLocalDateTimeTransformer, createDateTimeWithZoneIdTransformer: createDateTimeWithZoneIdTransformer, createDateTimeWithOffsetTransformer: createDateTimeWithOffsetTransformer });