RespEncoderLegacy.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.RespEncoderLegacy = void 0;
  4. const extensions_1 = require("./extensions");
  5. const JsonPackExtension_1 = require("../JsonPackExtension");
  6. const RespEncoder_1 = require("./RespEncoder");
  7. const REG_RN = /[\r\n]/;
  8. const isSafeInteger = Number.isSafeInteger;
  9. class RespEncoderLegacy extends RespEncoder_1.RespEncoder {
  10. writeAny(value) {
  11. switch (typeof value) {
  12. case 'number':
  13. return this.writeNumber(value);
  14. case 'string':
  15. return this.writeStr(value);
  16. case 'boolean':
  17. return this.writeSimpleStr(value ? 'TRUE' : 'FALSE');
  18. case 'object': {
  19. if (!value)
  20. return this.writeNull();
  21. if (value instanceof Array)
  22. return this.writeArr(value);
  23. if (value instanceof Uint8Array)
  24. return this.writeBin(value);
  25. if (value instanceof Error)
  26. return this.writeErr(value.message);
  27. if (value instanceof Set)
  28. return this.writeSet(value);
  29. if (value instanceof JsonPackExtension_1.JsonPackExtension) {
  30. if (value instanceof extensions_1.RespPush)
  31. return this.writeArr(value.val);
  32. if (value instanceof extensions_1.RespVerbatimString)
  33. return this.writeStr(value.val);
  34. if (value instanceof extensions_1.RespAttributes)
  35. return this.writeObj(value.val);
  36. }
  37. return this.writeObj(value);
  38. }
  39. case 'undefined':
  40. return this.writeUndef();
  41. case 'bigint':
  42. return this.writeSimpleStrAscii(value + '');
  43. default:
  44. return this.writeUnknown(value);
  45. }
  46. }
  47. writeNumber(num) {
  48. if (isSafeInteger(num))
  49. this.writeInteger(num);
  50. else
  51. this.writeSimpleStrAscii(num + '');
  52. }
  53. writeStr(str) {
  54. const length = str.length;
  55. if (length < 64 && !REG_RN.test(str))
  56. this.writeSimpleStr(str);
  57. else
  58. this.writeBulkStr(str);
  59. }
  60. writeNull() {
  61. this.writeNullArr();
  62. }
  63. writeErr(str) {
  64. if (str.length < 64 && !REG_RN.test(str))
  65. this.writeSimpleErr(str);
  66. else
  67. this.writeBulkStr(str);
  68. }
  69. writeSet(set) {
  70. this.writeArr([...set]);
  71. }
  72. writeArr(arr) {
  73. const writer = this.writer;
  74. const length = arr.length;
  75. writer.u8(42);
  76. this.writeLength(length);
  77. writer.u16(3338);
  78. for (let i = 0; i < length; i++) {
  79. const val = arr[i];
  80. if (val === null)
  81. this.writeNullStr();
  82. else
  83. this.writeAny(val);
  84. }
  85. }
  86. writeObj(obj) {
  87. const writer = this.writer;
  88. const keys = Object.keys(obj);
  89. const length = keys.length;
  90. writer.u8(42);
  91. this.writeLength(length << 1);
  92. writer.u16(3338);
  93. for (let i = 0; i < length; i++) {
  94. const key = keys[i];
  95. this.writeStr(key);
  96. const val = obj[key];
  97. if (val === null)
  98. this.writeNullStr();
  99. else
  100. this.writeAny(val);
  101. }
  102. }
  103. }
  104. exports.RespEncoderLegacy = RespEncoderLegacy;
  105. //# sourceMappingURL=RespEncoderLegacy.js.map