UNPKG

@ultipa-graph/ultipa-driver

Version:

NodeJS SDK for ultipa-server 5.1

166 lines 6.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DESERIALIZE = void 0; const ultipa_pb_1 = require("../../proto/ultipa_pb"); const ultipa_datetime_1 = require("../ultipa.datetime"); const commont_1 = require("./commont"); const null_1 = require("./null"); const types_1 = require("../../types/types"); const GlobalTextDecoder = new TextDecoder("utf-8"); var DESERIALIZE; (function (DESERIALIZE) { function deserialize(v, type, subTypes, timezone) { // console.log(`type: ${PropertyUtils.propertyGet(<any>type)}:`, v) const { STRING, FLOAT, DOUBLE, UINT32, INT64, UINT64, DATETIME, TIMESTAMP, TEXT, BLOB, POINT, DECIMAL, LIST, SET, MAP, } = types_1.UltipaPropertyType; switch (type) { case LIST: if (commont_1.TypeSupport.list) { return list(v, subTypes, timezone); } commont_1.TypeSupport.NotSupport(type); return; case MAP: if (commont_1.TypeSupport.map) { return map(v, subTypes, timezone); } commont_1.TypeSupport.NotSupport(type); return; case SET: return set(v, subTypes, timezone); } return base(v, type, timezone); } DESERIALIZE.deserialize = deserialize; ; function base(v, type, timezone) { if (null_1.NullUtils.isNullValueByBytes(v, type)) { return null; } const { INT32, BOOL, STRING, FLOAT, DOUBLE, UINT32, INT64, UINT64, DATETIME, TIMESTAMP, TEXT, BLOB, POINT, DECIMAL, LIST, SET, MAP, } = types_1.UltipaPropertyType; let convertV; switch (type) { case INT32: convertV = new DataView(v.buffer).getInt32(v.byteOffset); break; case BOOL: let b = v.toString(); if (b == "48") { convertV = 0; } else { convertV = 1; } break; case STRING: case TEXT: case DECIMAL: convertV = GlobalTextDecoder.decode(v); break; case POINT: if (16 != v.byteLength) { convertV = GlobalTextDecoder.decode(v); break; } let latitude_v = v.slice(0, 8); let latitude = new DataView(latitude_v.buffer).getFloat64(latitude_v.byteOffset).toString(); let longitude_v = v.slice(8, 16); let longitude = new DataView(longitude_v.buffer).getFloat64(longitude_v.byteOffset).toString(); convertV = `POINT(${latitude} ${longitude})`; break; case BLOB: convertV = Buffer.from(v); break; case FLOAT: convertV = Number(new DataView(v.buffer).getFloat32(v.byteOffset).toPrecision(7)).toString(); break; case DOUBLE: convertV = new DataView(v.buffer).getFloat64(v.byteOffset).toString(); break; case TIMESTAMP: convertV = new DataView(v.buffer).getUint32(v.byteOffset); break; case UINT32: convertV = new DataView(v.buffer).getUint32(v.byteOffset); break; case INT64: convertV = new DataView(v.buffer).getBigInt64(v.byteOffset).toString(); break; case UINT64: case DATETIME: convertV = new DataView(v.buffer).getBigUint64(v.byteOffset).toString(); break; } if (type == TIMESTAMP && timezone.timestampToString) { convertV = ultipa_datetime_1.UltipaDatetime.timestamp2Str(convertV, timezone); } if (type == DATETIME) { convertV = ultipa_datetime_1.UltipaDatetime.datetimeInt2datetimeStr(convertV); } return convertV; } DESERIALIZE.base = base; function list(v, types, timezone) { try { let data = ultipa_pb_1.ListData.deserializeBinary(v); if (data.getIsNull()) { return null; } let values = data.getValuesList_asU8(); let type = types[0]; let results = []; values.forEach((v, i) => { results.push(base(v, type, timezone)); }); return results; } catch (e) { console.log("deserialize>list", v, e); return []; } } DESERIALIZE.list = list; function map(v, types, timezone) { try { let data = ultipa_pb_1.MapData.deserializeBinary(v); if (data.getIsNull()) { return null; } let values = data.getValuesList(); let keyType = types[0]; let valueType = types[1]; let obj = {}; values.forEach((m) => { let key = base(m.getKey_asU8(), keyType, timezone); let value = base(m.getValue_asU8(), valueType, timezone); obj[key] = value; }); return obj; } catch (e) { console.log("deserialize>list", v, e); return []; } } DESERIALIZE.map = map; function set(v, types, timezone) { try { let data = ultipa_pb_1.SetData.deserializeBinary(v); if (data.getIsNull()) { return null; } let values = data.getValuesList_asU8(); let type = types[0]; let results = []; values.forEach((v, i) => { results.push(base(v, type, timezone)); }); return results; } catch (e) { console.log("deserialize>set", v, e); return []; } } DESERIALIZE.set = set; })(DESERIALIZE = exports.DESERIALIZE || (exports.DESERIALIZE = {})); //# sourceMappingURL=deserialize.js.map