You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-04 15:02:09 +03:00
New RESP2 parser (#1899)
* parser * a new RESP parser :) * clean code * fix simple string and bulk string cursor * performance improvements * change typescript compiler target * do not use stream.Transform * Update decoder.ts * fix for1d09acb
* improve integer performance * revert1d09acb
* improve RESP2 decoder performance * improve performance * improve encode performance * remove unused import * upgrade benchmark deps * clean code * fix socket error handlers, reset parser on error * fix #2080 - reset pubSubState on socket error * reset decoder on socket error * fix pubsub * fix "RedisSocketInitiator" * fix returnStringsAsBuffers * fix merge
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
|
||||
import { CommandOptions, isCommandOptions } from './command-options';
|
||||
import { RedisCommand, RedisCommandArgument, RedisCommandArguments, RedisCommandRawReply, RedisCommandReply, RedisCommands, RedisModules, RedisScript, RedisScripts } from './commands';
|
||||
import { RedisCommand, RedisCommandArguments, RedisCommandRawReply, RedisCommandReply, RedisCommands, RedisModules, RedisScript, RedisScripts } from './commands';
|
||||
|
||||
type Instantiable<T = any> = new(...args: Array<any>) => T;
|
||||
|
||||
@@ -89,37 +89,8 @@ export function transformCommandArguments<T>(
|
||||
};
|
||||
}
|
||||
|
||||
const DELIMITER = '\r\n';
|
||||
|
||||
export function* encodeCommand(args: RedisCommandArguments): IterableIterator<RedisCommandArgument> {
|
||||
let strings = `*${args.length}${DELIMITER}`,
|
||||
stringsLength = 0;
|
||||
for (const arg of args) {
|
||||
if (Buffer.isBuffer(arg)) {
|
||||
yield `${strings}$${arg.length}${DELIMITER}`;
|
||||
strings = '';
|
||||
stringsLength = 0;
|
||||
yield arg;
|
||||
} else {
|
||||
const string = arg?.toString?.() ?? '',
|
||||
byteLength = Buffer.byteLength(string);
|
||||
strings += `$${byteLength}${DELIMITER}`;
|
||||
|
||||
const totalLength = stringsLength + byteLength;
|
||||
if (totalLength > 1024) {
|
||||
yield strings;
|
||||
strings = string;
|
||||
stringsLength = byteLength;
|
||||
} else {
|
||||
strings += string;
|
||||
stringsLength = totalLength;
|
||||
}
|
||||
}
|
||||
|
||||
strings += DELIMITER;
|
||||
}
|
||||
|
||||
yield strings;
|
||||
export function transformLegacyCommandArguments(args: Array<any>): Array<any> {
|
||||
return args.flat().map(x => x?.toString?.());
|
||||
}
|
||||
|
||||
export function transformCommandReply(
|
||||
|
Reference in New Issue
Block a user