| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553 |
- "use strict";
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
- };
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
- if (kind === "m") throw new TypeError("Private method is not writable");
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
- };
- var _RedisClient_instances, _a, _RedisClient_options, _RedisClient_socket, _RedisClient_queue, _RedisClient_isolationPool, _RedisClient_v4, _RedisClient_selectedDB, _RedisClient_initiateOptions, _RedisClient_initiateQueue, _RedisClient_initiateSocket, _RedisClient_initiateIsolationPool, _RedisClient_legacyMode, _RedisClient_legacySendCommand, _RedisClient_defineLegacyCommand, _RedisClient_pingTimer, _RedisClient_setPingTimer, _RedisClient_sendCommand, _RedisClient_pubSubCommand, _RedisClient_tick, _RedisClient_addMultiCommands, _RedisClient_destroyIsolationPool;
- Object.defineProperty(exports, "__esModule", { value: true });
- const commands_1 = require("./commands");
- const socket_1 = require("./socket");
- const commands_queue_1 = require("./commands-queue");
- const multi_command_1 = require("./multi-command");
- const events_1 = require("events");
- const command_options_1 = require("../command-options");
- const commander_1 = require("../commander");
- const generic_pool_1 = require("generic-pool");
- const errors_1 = require("../errors");
- const url_1 = require("url");
- const pub_sub_1 = require("./pub-sub");
- const package_json_1 = require("../../package.json");
- class RedisClient extends events_1.EventEmitter {
- static commandOptions(options) {
- return (0, command_options_1.commandOptions)(options);
- }
- static extend(extensions) {
- const Client = (0, commander_1.attachExtensions)({
- BaseClass: _a,
- modulesExecutor: _a.prototype.commandsExecutor,
- modules: extensions?.modules,
- functionsExecutor: _a.prototype.functionsExecuter,
- functions: extensions?.functions,
- scriptsExecutor: _a.prototype.scriptsExecuter,
- scripts: extensions?.scripts
- });
- if (Client !== _a) {
- Client.prototype.Multi = multi_command_1.default.extend(extensions);
- }
- return Client;
- }
- static create(options) {
- return new (_a.extend(options))(options);
- }
- static parseURL(url) {
- // https://www.iana.org/assignments/uri-schemes/prov/redis
- const { hostname, port, protocol, username, password, pathname } = new url_1.URL(url), parsed = {
- socket: {
- host: hostname
- }
- };
- if (protocol === 'rediss:') {
- parsed.socket.tls = true;
- }
- else if (protocol !== 'redis:') {
- throw new TypeError('Invalid protocol');
- }
- if (port) {
- parsed.socket.port = Number(port);
- }
- if (username) {
- parsed.username = decodeURIComponent(username);
- }
- if (password) {
- parsed.password = decodeURIComponent(password);
- }
- if (pathname.length > 1) {
- const database = Number(pathname.substring(1));
- if (isNaN(database)) {
- throw new TypeError('Invalid pathname');
- }
- parsed.database = database;
- }
- return parsed;
- }
- get options() {
- return __classPrivateFieldGet(this, _RedisClient_options, "f");
- }
- get isOpen() {
- return __classPrivateFieldGet(this, _RedisClient_socket, "f").isOpen;
- }
- get isReady() {
- return __classPrivateFieldGet(this, _RedisClient_socket, "f").isReady;
- }
- get isPubSubActive() {
- return __classPrivateFieldGet(this, _RedisClient_queue, "f").isPubSubActive;
- }
- get v4() {
- if (!__classPrivateFieldGet(this, _RedisClient_options, "f")?.legacyMode) {
- throw new Error('the client is not in "legacy mode"');
- }
- return __classPrivateFieldGet(this, _RedisClient_v4, "f");
- }
- constructor(options) {
- super();
- _RedisClient_instances.add(this);
- Object.defineProperty(this, "commandOptions", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: _a.commandOptions
- });
- _RedisClient_options.set(this, void 0);
- _RedisClient_socket.set(this, void 0);
- _RedisClient_queue.set(this, void 0);
- _RedisClient_isolationPool.set(this, void 0);
- _RedisClient_v4.set(this, {});
- _RedisClient_selectedDB.set(this, 0);
- _RedisClient_pingTimer.set(this, void 0);
- Object.defineProperty(this, "select", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: this.SELECT
- });
- Object.defineProperty(this, "subscribe", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: this.SUBSCRIBE
- });
- Object.defineProperty(this, "unsubscribe", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: this.UNSUBSCRIBE
- });
- Object.defineProperty(this, "pSubscribe", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: this.PSUBSCRIBE
- });
- Object.defineProperty(this, "pUnsubscribe", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: this.PUNSUBSCRIBE
- });
- Object.defineProperty(this, "sSubscribe", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: this.SSUBSCRIBE
- });
- Object.defineProperty(this, "sUnsubscribe", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: this.SUNSUBSCRIBE
- });
- Object.defineProperty(this, "quit", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: this.QUIT
- });
- Object.defineProperty(this, "multi", {
- enumerable: true,
- configurable: true,
- writable: true,
- value: this.MULTI
- });
- __classPrivateFieldSet(this, _RedisClient_options, __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_initiateOptions).call(this, options), "f");
- __classPrivateFieldSet(this, _RedisClient_queue, __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_initiateQueue).call(this), "f");
- __classPrivateFieldSet(this, _RedisClient_socket, __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_initiateSocket).call(this), "f");
- // should be initiated in connect, not here
- // TODO: consider breaking in v5
- __classPrivateFieldSet(this, _RedisClient_isolationPool, __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_initiateIsolationPool).call(this), "f");
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_legacyMode).call(this);
- }
- duplicate(overrides) {
- return new (Object.getPrototypeOf(this).constructor)({
- ...__classPrivateFieldGet(this, _RedisClient_options, "f"),
- ...overrides
- });
- }
- async connect() {
- // see comment in constructor
- __classPrivateFieldSet(this, _RedisClient_isolationPool, __classPrivateFieldGet(this, _RedisClient_isolationPool, "f") ?? __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_initiateIsolationPool).call(this), "f");
- await __classPrivateFieldGet(this, _RedisClient_socket, "f").connect();
- return this;
- }
- async commandsExecutor(command, args) {
- const { args: redisArgs, options } = (0, commander_1.transformCommandArguments)(command, args);
- return (0, commander_1.transformCommandReply)(command, await __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_sendCommand).call(this, redisArgs, options), redisArgs.preserve);
- }
- sendCommand(args, options) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_sendCommand).call(this, args, options);
- }
- async functionsExecuter(fn, args, name) {
- const { args: redisArgs, options } = (0, commander_1.transformCommandArguments)(fn, args);
- return (0, commander_1.transformCommandReply)(fn, await this.executeFunction(name, fn, redisArgs, options), redisArgs.preserve);
- }
- executeFunction(name, fn, args, options) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_sendCommand).call(this, (0, commander_1.fCallArguments)(name, fn, args), options);
- }
- async scriptsExecuter(script, args) {
- const { args: redisArgs, options } = (0, commander_1.transformCommandArguments)(script, args);
- return (0, commander_1.transformCommandReply)(script, await this.executeScript(script, redisArgs, options), redisArgs.preserve);
- }
- async executeScript(script, args, options) {
- const redisArgs = ['EVALSHA', script.SHA1];
- if (script.NUMBER_OF_KEYS !== undefined) {
- redisArgs.push(script.NUMBER_OF_KEYS.toString());
- }
- redisArgs.push(...args);
- try {
- return await __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_sendCommand).call(this, redisArgs, options);
- }
- catch (err) {
- if (!err?.message?.startsWith?.('NOSCRIPT')) {
- throw err;
- }
- redisArgs[0] = 'EVAL';
- redisArgs[1] = script.SCRIPT;
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_sendCommand).call(this, redisArgs, options);
- }
- }
- async SELECT(options, db) {
- if (!(0, command_options_1.isCommandOptions)(options)) {
- db = options;
- options = null;
- }
- await __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_sendCommand).call(this, ['SELECT', db.toString()], options);
- __classPrivateFieldSet(this, _RedisClient_selectedDB, db, "f");
- }
- SUBSCRIBE(channels, listener, bufferMode) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_pubSubCommand).call(this, __classPrivateFieldGet(this, _RedisClient_queue, "f").subscribe(pub_sub_1.PubSubType.CHANNELS, channels, listener, bufferMode));
- }
- UNSUBSCRIBE(channels, listener, bufferMode) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_pubSubCommand).call(this, __classPrivateFieldGet(this, _RedisClient_queue, "f").unsubscribe(pub_sub_1.PubSubType.CHANNELS, channels, listener, bufferMode));
- }
- PSUBSCRIBE(patterns, listener, bufferMode) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_pubSubCommand).call(this, __classPrivateFieldGet(this, _RedisClient_queue, "f").subscribe(pub_sub_1.PubSubType.PATTERNS, patterns, listener, bufferMode));
- }
- PUNSUBSCRIBE(patterns, listener, bufferMode) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_pubSubCommand).call(this, __classPrivateFieldGet(this, _RedisClient_queue, "f").unsubscribe(pub_sub_1.PubSubType.PATTERNS, patterns, listener, bufferMode));
- }
- SSUBSCRIBE(channels, listener, bufferMode) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_pubSubCommand).call(this, __classPrivateFieldGet(this, _RedisClient_queue, "f").subscribe(pub_sub_1.PubSubType.SHARDED, channels, listener, bufferMode));
- }
- SUNSUBSCRIBE(channels, listener, bufferMode) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_pubSubCommand).call(this, __classPrivateFieldGet(this, _RedisClient_queue, "f").unsubscribe(pub_sub_1.PubSubType.SHARDED, channels, listener, bufferMode));
- }
- getPubSubListeners(type) {
- return __classPrivateFieldGet(this, _RedisClient_queue, "f").getPubSubListeners(type);
- }
- extendPubSubChannelListeners(type, channel, listeners) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_pubSubCommand).call(this, __classPrivateFieldGet(this, _RedisClient_queue, "f").extendPubSubChannelListeners(type, channel, listeners));
- }
- extendPubSubListeners(type, listeners) {
- return __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_pubSubCommand).call(this, __classPrivateFieldGet(this, _RedisClient_queue, "f").extendPubSubListeners(type, listeners));
- }
- QUIT() {
- return __classPrivateFieldGet(this, _RedisClient_socket, "f").quit(async () => {
- if (__classPrivateFieldGet(this, _RedisClient_pingTimer, "f"))
- clearTimeout(__classPrivateFieldGet(this, _RedisClient_pingTimer, "f"));
- const quitPromise = __classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(['QUIT']);
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_tick).call(this);
- const [reply] = await Promise.all([
- quitPromise,
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_destroyIsolationPool).call(this)
- ]);
- return reply;
- });
- }
- executeIsolated(fn) {
- if (!__classPrivateFieldGet(this, _RedisClient_isolationPool, "f"))
- return Promise.reject(new errors_1.ClientClosedError());
- return __classPrivateFieldGet(this, _RedisClient_isolationPool, "f").use(fn);
- }
- MULTI() {
- return new this.Multi(this.multiExecutor.bind(this), __classPrivateFieldGet(this, _RedisClient_options, "f")?.legacyMode);
- }
- async multiExecutor(commands, selectedDB, chainId) {
- if (!__classPrivateFieldGet(this, _RedisClient_socket, "f").isOpen) {
- return Promise.reject(new errors_1.ClientClosedError());
- }
- const promise = chainId ?
- // if `chainId` has a value, it's a `MULTI` (and not "pipeline") - need to add the `MULTI` and `EXEC` commands
- Promise.all([
- __classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(['MULTI'], { chainId }),
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_addMultiCommands).call(this, commands, chainId),
- __classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(['EXEC'], { chainId })
- ]) :
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_addMultiCommands).call(this, commands);
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_tick).call(this);
- const results = await promise;
- if (selectedDB !== undefined) {
- __classPrivateFieldSet(this, _RedisClient_selectedDB, selectedDB, "f");
- }
- return results;
- }
- async *scanIterator(options) {
- let cursor = 0;
- do {
- const reply = await this.scan(cursor, options);
- cursor = reply.cursor;
- for (const key of reply.keys) {
- yield key;
- }
- } while (cursor !== 0);
- }
- async *hScanIterator(key, options) {
- let cursor = 0;
- do {
- const reply = await this.hScan(key, cursor, options);
- cursor = reply.cursor;
- for (const tuple of reply.tuples) {
- yield tuple;
- }
- } while (cursor !== 0);
- }
- async *sScanIterator(key, options) {
- let cursor = 0;
- do {
- const reply = await this.sScan(key, cursor, options);
- cursor = reply.cursor;
- for (const member of reply.members) {
- yield member;
- }
- } while (cursor !== 0);
- }
- async *zScanIterator(key, options) {
- let cursor = 0;
- do {
- const reply = await this.zScan(key, cursor, options);
- cursor = reply.cursor;
- for (const member of reply.members) {
- yield member;
- }
- } while (cursor !== 0);
- }
- async disconnect() {
- if (__classPrivateFieldGet(this, _RedisClient_pingTimer, "f"))
- clearTimeout(__classPrivateFieldGet(this, _RedisClient_pingTimer, "f"));
- __classPrivateFieldGet(this, _RedisClient_queue, "f").flushAll(new errors_1.DisconnectsClientError());
- __classPrivateFieldGet(this, _RedisClient_socket, "f").disconnect();
- await __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_destroyIsolationPool).call(this);
- }
- ref() {
- __classPrivateFieldGet(this, _RedisClient_socket, "f").ref();
- }
- unref() {
- __classPrivateFieldGet(this, _RedisClient_socket, "f").unref();
- }
- }
- _a = RedisClient, _RedisClient_options = new WeakMap(), _RedisClient_socket = new WeakMap(), _RedisClient_queue = new WeakMap(), _RedisClient_isolationPool = new WeakMap(), _RedisClient_v4 = new WeakMap(), _RedisClient_selectedDB = new WeakMap(), _RedisClient_pingTimer = new WeakMap(), _RedisClient_instances = new WeakSet(), _RedisClient_initiateOptions = function _RedisClient_initiateOptions(options) {
- if (options?.url) {
- const parsed = _a.parseURL(options.url);
- if (options.socket) {
- parsed.socket = Object.assign(options.socket, parsed.socket);
- }
- Object.assign(options, parsed);
- }
- if (options?.database) {
- __classPrivateFieldSet(this, _RedisClient_selectedDB, options.database, "f");
- }
- return options;
- }, _RedisClient_initiateQueue = function _RedisClient_initiateQueue() {
- return new commands_queue_1.default(__classPrivateFieldGet(this, _RedisClient_options, "f")?.commandsQueueMaxLength, (channel, listeners) => this.emit('sharded-channel-moved', channel, listeners));
- }, _RedisClient_initiateSocket = function _RedisClient_initiateSocket() {
- const socketInitiator = async () => {
- const promises = [];
- if (__classPrivateFieldGet(this, _RedisClient_selectedDB, "f") !== 0) {
- promises.push(__classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(['SELECT', __classPrivateFieldGet(this, _RedisClient_selectedDB, "f").toString()], { asap: true }));
- }
- if (__classPrivateFieldGet(this, _RedisClient_options, "f")?.readonly) {
- promises.push(__classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(commands_1.default.READONLY.transformArguments(), { asap: true }));
- }
- if (!__classPrivateFieldGet(this, _RedisClient_options, "f")?.disableClientInfo) {
- promises.push(__classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(['CLIENT', 'SETINFO', 'LIB-VER', package_json_1.version], { asap: true }).catch(err => {
- if (!(err instanceof errors_1.ErrorReply)) {
- throw err;
- }
- }));
- promises.push(__classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand([
- 'CLIENT', 'SETINFO', 'LIB-NAME',
- __classPrivateFieldGet(this, _RedisClient_options, "f")?.clientInfoTag ? `node-redis(${__classPrivateFieldGet(this, _RedisClient_options, "f").clientInfoTag})` : 'node-redis'
- ], { asap: true }).catch(err => {
- if (!(err instanceof errors_1.ErrorReply)) {
- throw err;
- }
- }));
- }
- if (__classPrivateFieldGet(this, _RedisClient_options, "f")?.name) {
- promises.push(__classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(commands_1.default.CLIENT_SETNAME.transformArguments(__classPrivateFieldGet(this, _RedisClient_options, "f").name), { asap: true }));
- }
- if (__classPrivateFieldGet(this, _RedisClient_options, "f")?.username || __classPrivateFieldGet(this, _RedisClient_options, "f")?.password) {
- promises.push(__classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(commands_1.default.AUTH.transformArguments({
- username: __classPrivateFieldGet(this, _RedisClient_options, "f").username,
- password: __classPrivateFieldGet(this, _RedisClient_options, "f").password ?? ''
- }), { asap: true }));
- }
- const resubscribePromise = __classPrivateFieldGet(this, _RedisClient_queue, "f").resubscribe();
- if (resubscribePromise) {
- promises.push(resubscribePromise);
- }
- if (promises.length) {
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_tick).call(this, true);
- await Promise.all(promises);
- }
- };
- return new socket_1.default(socketInitiator, __classPrivateFieldGet(this, _RedisClient_options, "f")?.socket)
- .on('data', chunk => __classPrivateFieldGet(this, _RedisClient_queue, "f").onReplyChunk(chunk))
- .on('error', err => {
- this.emit('error', err);
- if (__classPrivateFieldGet(this, _RedisClient_socket, "f").isOpen && !__classPrivateFieldGet(this, _RedisClient_options, "f")?.disableOfflineQueue) {
- __classPrivateFieldGet(this, _RedisClient_queue, "f").flushWaitingForReply(err);
- }
- else {
- __classPrivateFieldGet(this, _RedisClient_queue, "f").flushAll(err);
- }
- })
- .on('connect', () => {
- this.emit('connect');
- })
- .on('ready', () => {
- this.emit('ready');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_setPingTimer).call(this);
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_tick).call(this);
- })
- .on('reconnecting', () => this.emit('reconnecting'))
- .on('drain', () => __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_tick).call(this))
- .on('end', () => this.emit('end'));
- }, _RedisClient_initiateIsolationPool = function _RedisClient_initiateIsolationPool() {
- return (0, generic_pool_1.createPool)({
- create: async () => {
- const duplicate = this.duplicate({
- isolationPoolOptions: undefined
- }).on('error', err => this.emit('error', err));
- await duplicate.connect();
- return duplicate;
- },
- destroy: client => client.disconnect()
- }, __classPrivateFieldGet(this, _RedisClient_options, "f")?.isolationPoolOptions);
- }, _RedisClient_legacyMode = function _RedisClient_legacyMode() {
- var _b, _c;
- if (!__classPrivateFieldGet(this, _RedisClient_options, "f")?.legacyMode)
- return;
- __classPrivateFieldGet(this, _RedisClient_v4, "f").sendCommand = __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_sendCommand).bind(this);
- this.sendCommand = (...args) => {
- const result = __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_legacySendCommand).call(this, ...args);
- if (result) {
- result.promise
- .then(reply => result.callback(null, reply))
- .catch(err => result.callback(err));
- }
- };
- for (const [name, command] of Object.entries(commands_1.default)) {
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, name, command);
- (_b = this)[_c = name.toLowerCase()] ?? (_b[_c] = this[name]);
- }
- // hard coded commands
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'SELECT');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'select');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'SUBSCRIBE');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'subscribe');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'PSUBSCRIBE');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'pSubscribe');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'UNSUBSCRIBE');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'unsubscribe');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'PUNSUBSCRIBE');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'pUnsubscribe');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'QUIT');
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_defineLegacyCommand).call(this, 'quit');
- }, _RedisClient_legacySendCommand = function _RedisClient_legacySendCommand(...args) {
- const callback = typeof args[args.length - 1] === 'function' ?
- args.pop() :
- undefined;
- const promise = __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_sendCommand).call(this, (0, commander_1.transformLegacyCommandArguments)(args));
- if (callback)
- return {
- promise,
- callback
- };
- promise.catch(err => this.emit('error', err));
- }, _RedisClient_defineLegacyCommand = function _RedisClient_defineLegacyCommand(name, command) {
- __classPrivateFieldGet(this, _RedisClient_v4, "f")[name] = this[name].bind(this);
- this[name] = command && command.TRANSFORM_LEGACY_REPLY && command.transformReply ?
- (...args) => {
- const result = __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_legacySendCommand).call(this, name, ...args);
- if (result) {
- result.promise
- .then(reply => result.callback(null, command.transformReply(reply)))
- .catch(err => result.callback(err));
- }
- } :
- (...args) => this.sendCommand(name, ...args);
- }, _RedisClient_setPingTimer = function _RedisClient_setPingTimer() {
- if (!__classPrivateFieldGet(this, _RedisClient_options, "f")?.pingInterval || !__classPrivateFieldGet(this, _RedisClient_socket, "f").isReady)
- return;
- clearTimeout(__classPrivateFieldGet(this, _RedisClient_pingTimer, "f"));
- __classPrivateFieldSet(this, _RedisClient_pingTimer, setTimeout(() => {
- if (!__classPrivateFieldGet(this, _RedisClient_socket, "f").isReady)
- return;
- // using #sendCommand to support legacy mode
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_sendCommand).call(this, ['PING'])
- .then(reply => this.emit('ping-interval', reply))
- .catch(err => this.emit('error', err))
- .finally(() => __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_setPingTimer).call(this));
- }, __classPrivateFieldGet(this, _RedisClient_options, "f").pingInterval), "f");
- }, _RedisClient_sendCommand = function _RedisClient_sendCommand(args, options) {
- if (!__classPrivateFieldGet(this, _RedisClient_socket, "f").isOpen) {
- return Promise.reject(new errors_1.ClientClosedError());
- }
- else if (options?.isolated) {
- return this.executeIsolated(isolatedClient => isolatedClient.sendCommand(args, {
- ...options,
- isolated: false
- }));
- }
- else if (!__classPrivateFieldGet(this, _RedisClient_socket, "f").isReady && __classPrivateFieldGet(this, _RedisClient_options, "f")?.disableOfflineQueue) {
- return Promise.reject(new errors_1.ClientOfflineError());
- }
- const promise = __classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(args, options);
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_tick).call(this);
- return promise;
- }, _RedisClient_pubSubCommand = function _RedisClient_pubSubCommand(promise) {
- if (promise === undefined)
- return Promise.resolve();
- __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_tick).call(this);
- return promise;
- }, _RedisClient_tick = function _RedisClient_tick(force = false) {
- if (__classPrivateFieldGet(this, _RedisClient_socket, "f").writableNeedDrain || (!force && !__classPrivateFieldGet(this, _RedisClient_socket, "f").isReady)) {
- return;
- }
- __classPrivateFieldGet(this, _RedisClient_socket, "f").cork();
- while (!__classPrivateFieldGet(this, _RedisClient_socket, "f").writableNeedDrain) {
- const args = __classPrivateFieldGet(this, _RedisClient_queue, "f").getCommandToSend();
- if (args === undefined)
- break;
- __classPrivateFieldGet(this, _RedisClient_socket, "f").writeCommand(args);
- }
- }, _RedisClient_addMultiCommands = function _RedisClient_addMultiCommands(commands, chainId) {
- return Promise.all(commands.map(({ args }) => __classPrivateFieldGet(this, _RedisClient_queue, "f").addCommand(args, { chainId })));
- }, _RedisClient_destroyIsolationPool = async function _RedisClient_destroyIsolationPool() {
- await __classPrivateFieldGet(this, _RedisClient_isolationPool, "f").drain();
- await __classPrivateFieldGet(this, _RedisClient_isolationPool, "f").clear();
- __classPrivateFieldSet(this, _RedisClient_isolationPool, undefined, "f");
- };
- exports.default = RedisClient;
- (0, commander_1.attachCommands)({
- BaseClass: RedisClient,
- commands: commands_1.default,
- executor: RedisClient.prototype.commandsExecutor
- });
- RedisClient.prototype.Multi = multi_command_1.default;
|