@ultipa-graph/ultipa-node-sdk
Version:
NodeJS SDK for ultipa-server 4.0
149 lines • 5.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DESERIALIZE = void 0;
const ultipa_pb_1 = require("../../proto/ultipa_pb");
const types_1 = require("../../types");
const ultipa_datetime_1 = require("../ultipa.datetime");
const commont_1 = require("./commont");
const null_1 = require("./null");
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 { PROPERTY_INT32, PROPERTY_STRING, PROPERTY_FLOAT, PROPERTY_DOUBLE, PROPERTY_UINT32, PROPERTY_INT64, PROPERTY_UINT64, PROPERTY_DATETIME, PROPERTY_TIMESTAMP, PROPERTY_TEXT, PROPERTY_BLOB, PROPERTY_POINT, PROPERTY_DECIMAL, PROPERTY_LIST, PROPERTY_SET, PROPERTY_MAP, } = types_1.ULTIPA.PropertyType;
switch (type) {
case PROPERTY_LIST:
if (commont_1.TypeSupport.list) {
return list(v, subTypes, timeZone);
}
commont_1.TypeSupport.NotSupport(type);
return;
case PROPERTY_MAP:
if (commont_1.TypeSupport.map) {
return map(v, subTypes, timeZone);
}
commont_1.TypeSupport.NotSupport(type);
return;
case PROPERTY_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 { PROPERTY_INT32, PROPERTY_STRING, PROPERTY_FLOAT, PROPERTY_DOUBLE, PROPERTY_UINT32, PROPERTY_INT64, PROPERTY_UINT64, PROPERTY_DATETIME, PROPERTY_TIMESTAMP, PROPERTY_TEXT, PROPERTY_BLOB, PROPERTY_POINT, PROPERTY_DECIMAL, PROPERTY_LIST, PROPERTY_SET, PROPERTY_MAP, } = types_1.ULTIPA.PropertyType;
let convertV;
switch (type) {
case PROPERTY_INT32:
convertV = new DataView(v.buffer).getInt32(v.byteOffset);
break;
case PROPERTY_DECIMAL:
case PROPERTY_STRING:
case PROPERTY_TEXT:
case PROPERTY_POINT:
// return new TextDecoder("utf-8").decode(v);
convertV = GlobalTextDecoder.decode(v);
break;
case PROPERTY_BLOB:
// return new TextDecoder("utf-8").decode(v);
convertV = Buffer.from(v);
break;
case PROPERTY_FLOAT:
convertV = Number(new DataView(v.buffer).getFloat32(v.byteOffset).toPrecision(7)).toString();
break;
case PROPERTY_DOUBLE:
convertV = new DataView(v.buffer).getFloat64(v.byteOffset).toString();
break;
case PROPERTY_TIMESTAMP:
convertV = new DataView(v.buffer).getUint32(v.byteOffset);
break;
case PROPERTY_UINT32:
convertV = new DataView(v.buffer).getUint32(v.byteOffset);
break;
case PROPERTY_INT64:
convertV = new DataView(v.buffer).getBigInt64(v.byteOffset).toString();
break;
case PROPERTY_UINT64:
case PROPERTY_DATETIME:
convertV = new DataView(v.buffer).getBigUint64(v.byteOffset).toString();
break;
}
if (type == PROPERTY_TIMESTAMP && timeZone.timestampToString) {
convertV = ultipa_datetime_1.UltipaDatetime.timestamp2Str(convertV, timeZone);
}
if (type == PROPERTY_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 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;
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;
})(DESERIALIZE = exports.DESERIALIZE || (exports.DESERIALIZE = {}));
//# sourceMappingURL=deserialize.js.map