UNPKG

redis-typescript

Version:

redis client for node.js with typescript and async

129 lines 4.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Protocol { constructor() { this._result = new Array(); this._end = ""; this.data = { state: true, res: { error: false, data: null, }, }; } write(data) { const array = (this._end + data.toString()).split("\r\n"); this._end = array.pop(); this._result = this._result.concat(array); } parse() { this.data = { state: true, res: { error: false, data: null, }, }; if (this._result.length < 1 || (this._result.length === 1 && this._end.length !== 0)) { this.data.state = false; } else { const current = this._result[0]; switch (current.charAt(0)) { case "+": this.data.res = { error: false, data: current.slice(1), }; this._result.shift(); break; case "-": this.data.res = { error: true, data: current.slice(1), }; this._result.shift(); break; case ":": this.data.res = { error: false, data: +current.slice(1), }; this._result.shift(); break; case "$": if (-1 === parseInt(current.slice(1), 10)) { this.data.res = { error: false, data: null, }; this._result.shift(); } else { this._result.shift(); this.data.res = { error: false, data: this._result.shift(), }; } break; case "*": const len = parseInt(current.slice(1), 10); if (0 === len) { this.data.res = { error: false, data: [], }; this._result.shift(); } else { this.data.res.data = []; let i; for (i = 1; i < this._result.length && this.data.res.data.length < len; i++) { if ("$-1" === this._result[i].slice(0, 3)) { this.data.res.data.push(null); } else if (typeof this._result[i + 1] === "undefined") { break; } else { this.data.res.data.push(this._result[++i]); } } if (this.data.res.data.length === len) { this._result.splice(0, i); } else { this.data.state = false; } } break; default: this.data.state = false; } } } encode(...parameters) { const length = parameters.length; let parameter; let request = `*${length}\r\n`; for (let i = 0; i < length; i++) { parameter = parameters[i]; if (typeof parameter === "string") { request += `$${parameter.length}\r\n${parameter}\r\n`; } else if (typeof parameter === "number") { parameter = parameter.toString(); request += `$${parameter.length}\r\n${parameter}\r\n`; } else { throw new Error("encode ags err"); } } return request; } } exports.Protocol = Protocol; //# sourceMappingURL=protocol.js.map