Skip to content

cryptomafiaPB/redis-parser-ts

Repository files navigation

redis-parser-ts

A blazing-fast, fully-typed TypeScript library for decoding and encoding Redis RESP protocol messages. Perfect for custom Redis server implementations, testing tools, proxies, or educational projects.

Features

  • Incremental RESP parsing (simple string, error, integer, bulk string, array, null)
  • Buffer-safe for streaming/TCP – handles fragmented messages
  • Robust error reporting with auto-recovery options
  • Universal encoder – encode any JS or RESP value to valid RESP wire protocol
  • Comprehensive TypeScript types – safe and intuitive DX
  • Event-driven API with sync parsing and buffer inspection

Installation

npm install redis-parser-ts

Usage

Parsing Incoming RESP Messages


const parser = new RESPParser()

parser.on('message', msg => {
// Handle decoded RESPValue object
console.log(msg)
})

parser.on('error', err => {
// Typed error object
console.error('Parse error:', err)
})

// Feed chunks (as Buffer or string) from network or files
parser.feed('+OK\r\n:42\r\n')

Encoding RESP Replies

import { RESLEncoder } from 'redis-parser-ts'

// Simple reply
const respOk = RESLEncoder.simple('OK') // Buffer with '+OK\r\n'
// Bulk string
const respBulk = RESLEncoder.bulk('foobar') // Buffer with '$6\r\nfoobar\r\n'
// Array
const respArray = RESLEncoder.array(['foo', 'bar']) // Buffer with '*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n'

// Send Buffer to TCP socket, etc.

API

RESPParser

  • .feed(data: Buffer | string) – Add a chunk to the parser, emits 'message' event(s) for each complete message.
  • .on('message', callback) – Event for RESPValue objects.
  • .on('error', callback) – Event for protocol errors.
  • .parseSync() – Synchronously parse one message from buffer, returns RESPValue or null.
  • .reset() – Reset buffer and state.
  • .clearBuffer() – Wipe buffer while retaining parser state.
  • .getBufferLength() – Get length of current buffer.

RESLEncoder

  • .simple(value: string): Buffer – Encode a simple string.
  • .error(value: string): Buffer – Encode an error reply.
  • .integer(value: number): Buffer – Encode integer.
  • .bulk(value: string | Buffer | null): Buffer – Encode bulk string or null.
  • .array(values: Array<string | number | null | Buffer | RESPValue | Array<any>>): Buffer – Encode array.
  • .encode(value: any): Buffer – Smart generic encoder for any valid value.

RESPValue Type

All parser messages and encoder values conform to:

type RESPValue =
| { type: 'simple', value: string }
| { type: 'error', value: string }
| { type: 'integer', value: number }
| { type: 'bulk', value: string | null }
| { type: 'array', value: RESPValue[] | null }

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published