@ultipa-graph/ultipa-driver
Version:
NodeJS SDK for ultipa-server 5.2
146 lines • 6.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SERIALIZE = void 0;
const types_1 = require("../../types/types");
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 GlobalTextDecoder = new TextDecoder("utf-8");
var SERIALIZE;
(function (SERIALIZE) {
function serialize(v, type, subTypes, timezone) {
const { INT32, STRING, FLOAT, DOUBLE, UINT32, INT64, UINT64, DATETIME, TIMESTAMP, TEXT, BLOB, POINT, DECIMAL, LIST, SET, MAP, BOOL, } = 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);
}
SERIALIZE.serialize = serialize;
function base(in_v, type, timezone) {
if (in_v === undefined || in_v === null) {
let bytes = null_1.NullUtils.nullValue(type);
return Buffer.from(bytes.buffer);
}
const { INT32, BOOL, STRING, FLOAT, DOUBLE, UINT32, INT64, UINT64, DATETIME, TIMESTAMP, TEXT, BLOB, POINT, DECIMAL, LIST, SET, MAP, LOCAL_DATETIME, ZONED_DATETIME, YEAR_TO_MONTH, DAY_TO_SECOND, DATE, LOCAL_TIME, ZONED_TIME } = types_1.UltipaPropertyType;
let v = in_v;
if (type == BLOB) {
return Buffer.from(v);
}
let dataView64 = new DataView(new ArrayBuffer(8));
let dataView32 = new DataView(new ArrayBuffer(4));
switch (type) {
case INT32:
dataView32.setInt32(0, (0, commont_1.SafeInt)(v));
return Buffer.from(dataView32.buffer);
case BOOL:
if (v === "true") {
v = "1";
}
else if (v === "false") {
v = "0";
}
return Buffer.from(String(Number(v)));
// case STRING: // by default
// return Buffer.from(v, 'utf8');
case FLOAT:
dataView32.setFloat32(0, (0, commont_1.SafeFloat)(v));
return Buffer.from(dataView32.buffer);
case DOUBLE:
dataView64.setFloat64(0, (0, commont_1.SafeFloat)(v));
return Buffer.from(dataView64.buffer);
case TIMESTAMP:
// if (timezone.timestampToString) {
if (typeof v === "string") {
let t1 = ultipa_datetime_1.UltipaDatetime.timestampStr2int(v, timezone);
dataView32.setUint32(0, t1);
return Buffer.from(dataView32.buffer);
}
dataView32.setUint32(0, (0, commont_1.SafeInt)(v));
return Buffer.from(dataView32.buffer);
case UINT32:
dataView32.setUint32(0, (0, commont_1.SafeInt)(v));
return Buffer.from(dataView32.buffer);
case INT64:
dataView64.setBigInt64(0, (0, commont_1.SafeBigInt)(v));
return Buffer.from(dataView64.buffer);
case UINT64:
dataView64.setBigUint64(0, (0, commont_1.SafeBigInt)(v));
return Buffer.from(dataView64.buffer);
case DATETIME:
let time = ultipa_datetime_1.UltipaDatetime.datetimeStr2datetimeString(v);
dataView64.setBigUint64(0, (0, commont_1.SafeBigInt)(time));
return Buffer.from(dataView64.buffer);
case DATE:
case DAY_TO_SECOND:
case LOCAL_DATETIME:
case LOCAL_TIME:
case YEAR_TO_MONTH:
case ZONED_DATETIME:
case ZONED_TIME:
return Buffer.from(v, "utf-8");
}
if (typeof v == "number") {
v = v + "";
}
if (!v) {
v = "";
}
return Buffer.from(v, "utf8");
}
SERIALIZE.base = base;
function list(vs, types, timezone) {
if (vs === undefined || vs === null) {
let bytes = null_1.NullUtils.nullValue(types_1.UltipaPropertyType.LIST);
return Buffer.from(bytes.buffer);
}
let listData = new ultipa_pb_1.ListData();
let type = types[0];
vs.forEach((v, i) => {
listData.addValues(base(v, type, timezone));
});
return Buffer.from(listData.serializeBinary().buffer);
}
SERIALIZE.list = list;
function map(v, types, timezone) {
let mapData = new ultipa_pb_1.MapData();
let keyType = types[0];
let valueType = types[1];
for (const key in v) {
const element = v[key];
let m = new ultipa_pb_1.MapValue();
m.setKey(base(key, keyType, timezone));
m.setValue(base(element, valueType, timezone));
mapData.addValues(m);
}
return Buffer.from(mapData.serializeBinary().buffer);
}
SERIALIZE.map = map;
function set(vs, types, timezone) {
if (vs === undefined || vs === null) {
let bytes = null_1.NullUtils.nullValue(types_1.UltipaPropertyType.SET);
return Buffer.from(bytes.buffer);
}
let setData = new ultipa_pb_1.SetData();
let type = types[0];
vs.forEach((v, i) => {
setData.addValues(base(v, type, timezone));
});
return Buffer.from(setData.serializeBinary().buffer);
}
SERIALIZE.set = set;
})(SERIALIZE = exports.SERIALIZE || (exports.SERIALIZE = {}));
//# sourceMappingURL=serialize.js.map