UNPKG

@ultipa-graph/ultipa-driver

Version:

NodeJS SDK for ultipa-server 5.2

146 lines 6.19 kB
"use strict"; 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