node-ejs-renderer/node_modules/@jsonjoy.com/json-pack/lib/resp/RespEncoderLegacy.js
2024-06-09 13:55:01 -04:00

105 lines
3.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RespEncoderLegacy = void 0;
const extensions_1 = require("./extensions");
const JsonPackExtension_1 = require("../JsonPackExtension");
const RespEncoder_1 = require("./RespEncoder");
const REG_RN = /[\r\n]/;
const isSafeInteger = Number.isSafeInteger;
class RespEncoderLegacy extends RespEncoder_1.RespEncoder {
writeAny(value) {
switch (typeof value) {
case 'number':
return this.writeNumber(value);
case 'string':
return this.writeStr(value);
case 'boolean':
return this.writeSimpleStr(value ? 'TRUE' : 'FALSE');
case 'object': {
if (!value)
return this.writeNull();
if (value instanceof Array)
return this.writeArr(value);
if (value instanceof Uint8Array)
return this.writeBin(value);
if (value instanceof Error)
return this.writeErr(value.message);
if (value instanceof Set)
return this.writeSet(value);
if (value instanceof JsonPackExtension_1.JsonPackExtension) {
if (value instanceof extensions_1.RespPush)
return this.writeArr(value.val);
if (value instanceof extensions_1.RespVerbatimString)
return this.writeStr(value.val);
if (value instanceof extensions_1.RespAttributes)
return this.writeObj(value.val);
}
return this.writeObj(value);
}
case 'undefined':
return this.writeUndef();
case 'bigint':
return this.writeSimpleStrAscii(value + '');
default:
return this.writeUnknown(value);
}
}
writeNumber(num) {
if (isSafeInteger(num))
this.writeInteger(num);
else
this.writeSimpleStrAscii(num + '');
}
writeStr(str) {
const length = str.length;
if (length < 64 && !REG_RN.test(str))
this.writeSimpleStr(str);
else
this.writeBulkStr(str);
}
writeNull() {
this.writeNullArr();
}
writeErr(str) {
if (str.length < 64 && !REG_RN.test(str))
this.writeSimpleErr(str);
else
this.writeBulkStr(str);
}
writeSet(set) {
this.writeArr([...set]);
}
writeArr(arr) {
const writer = this.writer;
const length = arr.length;
writer.u8(42);
this.writeLength(length);
writer.u16(3338);
for (let i = 0; i < length; i++) {
const val = arr[i];
if (val === null)
this.writeNullStr();
else
this.writeAny(val);
}
}
writeObj(obj) {
const writer = this.writer;
const keys = Object.keys(obj);
const length = keys.length;
writer.u8(42);
this.writeLength(length << 1);
writer.u16(3338);
for (let i = 0; i < length; i++) {
const key = keys[i];
this.writeStr(key);
const val = obj[key];
if (val === null)
this.writeNullStr();
else
this.writeAny(val);
}
}
}
exports.RespEncoderLegacy = RespEncoderLegacy;
//# sourceMappingURL=RespEncoderLegacy.js.map