UNPKG

memcache-client

Version:
59 lines 2.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); /* eslint-disable no-bitwise,no-magic-numbers,max-params,no-unused-vars,max-statements,no-var */ /* eslint max-len:[2,120] */ const assert_1 = tslib_1.__importDefault(require("assert")); const value_flags_1 = require("./value-flags"); class ValuePacker { constructor(compressor) { this.compressor = compressor; } pack(value, compress) { const valueType = typeof value; const isBuffer = Buffer.isBuffer(value); var flag = 0; if (isBuffer) { flag = value_flags_1.ValueFlags.TYPE_BINARY; } else if (valueType === "number") { flag = value_flags_1.ValueFlags.TYPE_NUMERIC; value = JSON.stringify(value); } else if (valueType === "object") { flag = value_flags_1.ValueFlags.TYPE_JSON; value = JSON.stringify(value); } if (compress && value.length >= 100) { (0, assert_1.default)(this.compressor !== undefined, "No compressor available to compress value"); flag |= value_flags_1.ValueFlags.COMPRESS; if (!isBuffer) { value = Buffer.from(value); } value = this.compressor.compressSync({ input: value }); } return { flag, data: value }; } unpack(packed) { const flag = packed.flag; const compress = (flag & value_flags_1.ValueFlags.COMPRESS) === value_flags_1.ValueFlags.COMPRESS; var data = packed.data; if (compress) { (0, assert_1.default)(this.compressor !== undefined, "No compressor available to decompress data"); data = this.compressor.decompressSync({ input: data }); } const type = flag & value_flags_1.ValueFlags.TYPE_ALL; if (type === value_flags_1.ValueFlags.TYPE_NUMERIC) { data = +data.toString(); } else if (type === value_flags_1.ValueFlags.TYPE_JSON) { data = JSON.parse(data); } else if (type !== value_flags_1.ValueFlags.TYPE_BINARY) { data = data.toString(); } return data; } } exports.default = ValuePacker; //# sourceMappingURL=value-packer.js.map