From 3dbaaf59246f495e0d65fb9c815a036f34ceef39 Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Wed, 12 Jul 2023 18:34:32 +0200 Subject: [PATCH] Switch to ioredis --- ...@types-connect-redis-npm-0.0.18-4fd2b614d3 | 13 - package.json | 1 - packages/@uppy/companion/package.json | 5 +- packages/@uppy/companion/src/companion.js | 6 +- .../companion/src/server/emitter/index.js | 4 +- .../src/server/emitter/redis-emitter.js | 26 +- packages/@uppy/companion/src/server/redis.js | 25 +- packages/@uppy/companion/src/server/socket.js | 2 +- .../@uppy/companion/src/standalone/helper.js | 15 +- .../@uppy/companion/src/standalone/index.js | 3 +- yarn.lock | 225 +++++++----------- 11 files changed, 128 insertions(+), 197 deletions(-) delete mode 100644 .yarn/patches/@types-connect-redis-npm-0.0.18-4fd2b614d3 diff --git a/.yarn/patches/@types-connect-redis-npm-0.0.18-4fd2b614d3 b/.yarn/patches/@types-connect-redis-npm-0.0.18-4fd2b614d3 deleted file mode 100644 index 5e1e902d3d..0000000000 --- a/.yarn/patches/@types-connect-redis-npm-0.0.18-4fd2b614d3 +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/index.d.ts b/index.d.ts -index 413b15edf95c12b1b176279c82b3a9c3f06ade20..0158f6f7a95935acbb67aeea00cb94c241475565 100755 ---- a/index.d.ts -+++ b/index.d.ts -@@ -19,7 +19,7 @@ declare module 'connect-redis' { - function s(options: (options?: session.SessionOptions) => express.RequestHandler): s.RedisStore; - - namespace s { -- type Client = redis.RedisClient | ioRedis.Redis | ioRedis.Cluster; -+ type Client = redis.RedisClientType | ioRedis.Redis | ioRedis.Cluster; - interface RedisStore extends session.Store { - new (options: RedisStoreOptions): RedisStore; - client: Client; diff --git a/package.json b/package.json index d62b40b93b..81ad5bb100 100644 --- a/package.json +++ b/package.json @@ -168,7 +168,6 @@ ] }, "resolutions": { - "@types/connect-redis@0.0.18": "patch:@types/connect-redis@npm:0.0.18#.yarn/patches/@types-connect-redis-npm-0.0.18-4fd2b614d3", "@types/eslint@^7.2.13": "^8.2.0", "@types/react": "^17", "@types/webpack-dev-server": "^4", diff --git a/packages/@uppy/companion/package.json b/packages/@uppy/companion/package.json index e6f6362f24..5b29ac6962 100644 --- a/packages/@uppy/companion/package.json +++ b/packages/@uppy/companion/package.json @@ -36,7 +36,7 @@ "body-parser": "1.20.0", "chalk": "4.1.2", "common-tags": "1.8.2", - "connect-redis": "6.1.3", + "connect-redis": "7.1.0", "content-disposition": "^0.5.4", "cookie-parser": "1.4.6", "cors": "^2.8.5", @@ -52,6 +52,7 @@ "got": "11", "grant": "5.4.21", "helmet": "^4.6.0", + "ioredis": "5.3.2", "ipaddr.js": "^2.0.1", "jsonwebtoken": "8.5.1", "lodash": "^4.17.21", @@ -62,7 +63,6 @@ "ms": "2.1.3", "node-schedule": "2.1.0", "prom-client": "14.0.1", - "redis": "4.2.0", "semver": "7.5.3", "serialize-error": "^2.1.0", "serialize-javascript": "^6.0.0", @@ -73,7 +73,6 @@ }, "devDependencies": { "@types/compression": "1.7.0", - "@types/connect-redis": "0.0.18", "@types/cookie-parser": "1.4.2", "@types/cors": "2.8.6", "@types/eslint": "^8.2.0", diff --git a/packages/@uppy/companion/src/companion.js b/packages/@uppy/companion/src/companion.js index 92e2464476..a5952671c9 100644 --- a/packages/@uppy/companion/src/companion.js +++ b/packages/@uppy/companion/src/companion.js @@ -84,10 +84,10 @@ module.exports.app = (optionsArg = {}) => { logger.setMaskables(getMaskableSecrets(options)) // create singleton redis client - if (options.redisUrl) { - redis.client(options) + if (options.redisOptions) { + redis.client(options.redisOptions) } - const emitter = createEmitter(options.redisUrl, options.redisPubSubScope) + const emitter = createEmitter(options.redisOptions, options.redisPubSubScope) const app = express() diff --git a/packages/@uppy/companion/src/server/emitter/index.js b/packages/@uppy/companion/src/server/emitter/index.js index f651a7f8c4..cb8e9b8544 100644 --- a/packages/@uppy/companion/src/server/emitter/index.js +++ b/packages/@uppy/companion/src/server/emitter/index.js @@ -8,9 +8,9 @@ let emitter * Used to transmit events (such as progress, upload completion) from controllers, * such as the Google Drive 'get' controller, along to the client. */ -module.exports = (redisUrl, redisPubSubScope) => { +module.exports = (redisOptions, redisPubSubScope) => { if (!emitter) { - emitter = redisUrl ? redisEmitter(redisUrl, redisPubSubScope) : nodeEmitter() + emitter = redisOptions ? redisEmitter(redisPubSubScope) : nodeEmitter() } return emitter diff --git a/packages/@uppy/companion/src/server/emitter/redis-emitter.js b/packages/@uppy/companion/src/server/emitter/redis-emitter.js index df1badfef8..5f273a15bd 100644 --- a/packages/@uppy/companion/src/server/emitter/redis-emitter.js +++ b/packages/@uppy/companion/src/server/emitter/redis-emitter.js @@ -1,23 +1,23 @@ -const redis = require('redis') const { EventEmitter } = require('node:events') const logger = require('../logger') +const redis = require('../redis') /** * This module simulates the builtin events.EventEmitter but with the use of redis. * This is useful for when companion is running on multiple instances and events need * to be distributed across. */ -module.exports = (redisUrl, redisPubSubScope) => { +module.exports = (redisPubSubScope) => { const prefix = redisPubSubScope ? `${redisPubSubScope}:` : '' const getPrefixedEventName = (eventName) => `${prefix}${eventName}` - const publisher = redis.createClient({ url: redisUrl }) - publisher.on('error', err => logger.error('publisher redis error', err)) + const publisher = redis.client().duplicate({ lazyConnect: true }) + publisher.on('error', err => logger.error('publisher redis error', err.toString())) let subscriber const connectedPromise = publisher.connect().then(() => { subscriber = publisher.duplicate() - subscriber.on('error', err => logger.error('subscriber redis error', err)) + subscriber.on('error', err => logger.error('subscriber redis error', err.toString())) return subscriber.connect() }) @@ -56,12 +56,17 @@ module.exports = (redisUrl, redisPubSubScope) => { handlersByThisEventName.delete(handler) if (handlersByThisEventName.size === 0) handlersByEvent.delete(eventName) - return subscriber.pUnsubscribe(getPrefixedEventName(eventName), actualHandler) + subscriber.off('message', actualHandler) + return subscriber.punsubscribe(getPrefixedEventName(eventName)) }) } function addListener (eventName, handler, _once = false) { - function actualHandler (message) { + function actualHandler (pattern, channel, message) { + if (pattern !== getPrefixedEventName(eventName)) { + return + } + if (_once) removeListener(eventName, handler) let args try { @@ -79,7 +84,10 @@ module.exports = (redisUrl, redisPubSubScope) => { } handlersByThisEventName.set(handler, actualHandler) - runWhenConnected(() => subscriber.pSubscribe(getPrefixedEventName(eventName), actualHandler)) + runWhenConnected(() => { + subscriber.on('pmessage', actualHandler) + return subscriber.psubscribe(getPrefixedEventName(eventName)) + }) } /** @@ -125,7 +133,7 @@ module.exports = (redisUrl, redisPubSubScope) => { return runWhenConnected(() => { handlersByEvent.delete(eventName) - return subscriber.pUnsubscribe(getPrefixedEventName(eventName)) + return subscriber.punsubscribe(getPrefixedEventName(eventName)) }) } diff --git a/packages/@uppy/companion/src/server/redis.js b/packages/@uppy/companion/src/server/redis.js index 10298c6f08..330d08381f 100644 --- a/packages/@uppy/companion/src/server/redis.js +++ b/packages/@uppy/companion/src/server/redis.js @@ -1,4 +1,4 @@ -const redis = require('redis') +const Redis = require('ioredis').default const logger = require('./logger') @@ -8,33 +8,22 @@ let redisClient * A Singleton module that provides a single redis client through out * the lifetime of the server * - * @param {Record} [opts] node-redis client options + * @param {Record} [opts] node-redis client options */ function createClient (opts) { if (!redisClient) { - // todo remove legacyMode when fixed: https://github.com/tj/connect-redis/issues/361 - redisClient = redis.createClient({ ...opts, legacyMode: true }) + redisClient = new Redis(opts) - redisClient.on('error', err => logger.error('redis error', err)) - - ;(async () => { - try { - // fire and forget. - // any requests made on the client before connection is established will be auto-queued by node-redis - await redisClient.connect() - } catch (err) { - logger.error(err.message, 'redis.error') - } - })() + redisClient.on('error', err => logger.error('redis error', err.toString())) } return redisClient } -module.exports.client = (companionOptions) => { - if (!companionOptions) { +module.exports.client = (redisOptions) => { + if (!redisOptions) { return redisClient } - return createClient({ ...companionOptions.redisOptions, url: companionOptions.redisUrl }) + return createClient(redisOptions) } diff --git a/packages/@uppy/companion/src/server/socket.js b/packages/@uppy/companion/src/server/socket.js index ae4a70046d..ba0a3ae4be 100644 --- a/packages/@uppy/companion/src/server/socket.js +++ b/packages/@uppy/companion/src/server/socket.js @@ -12,7 +12,7 @@ const { STORAGE_PREFIX, shortenToken } = require('./Uploader') */ module.exports = (server) => { const wss = new SocketServer({ server }) - const redisClient = redis.client()?.v4 + const redisClient = redis.client() // A new connection is usually created when an upload begins, // or when connection fails while an upload is on-going and, diff --git a/packages/@uppy/companion/src/standalone/helper.js b/packages/@uppy/companion/src/standalone/helper.js index 48c0c8a7a9..f5185e4f6f 100644 --- a/packages/@uppy/companion/src/standalone/helper.js +++ b/packages/@uppy/companion/src/standalone/helper.js @@ -152,11 +152,20 @@ const getConfigFromEnv = () => { periodicPingCount: process.env.COMPANION_PERIODIC_PING_COUNT ? parseInt(process.env.COMPANION_PERIODIC_PING_COUNT, 10) : undefined, filePath: process.env.COMPANION_DATADIR, - redisUrl: process.env.COMPANION_REDIS_URL, redisPubSubScope: process.env.COMPANION_REDIS_PUBSUB_SCOPE, // adding redisOptions to keep all companion options easily visible - // redisOptions refers to https://www.npmjs.com/package/redis#options-object-properties - redisOptions: {}, + // redisOptions refers to https://redis.github.io/ioredis/index.html#RedisOptions + redisOptions: (() => { + try { + const obj = JSON.parse(process.env.COMPANION_REDIS_OPTIONS) + return obj + } catch (e) { + if (process.env.COMPANION_REDIS_OPTIONS) { + console.log('COMPANION_REDIS_OPTIONS parse error', e) + } + return process.env.COMPANION_REDIS_URL + } + })(), sendSelfEndpoint: process.env.COMPANION_SELF_ENDPOINT, uploadUrls: uploadUrls ? uploadUrls.split(',') : null, secret: getSecret('COMPANION_SECRET'), diff --git a/packages/@uppy/companion/src/standalone/index.js b/packages/@uppy/companion/src/standalone/index.js index fa395782d5..9a8f946101 100644 --- a/packages/@uppy/companion/src/standalone/index.js +++ b/packages/@uppy/companion/src/standalone/index.js @@ -5,7 +5,7 @@ const morgan = require('morgan') const { URL } = require('node:url') const session = require('express-session') const addRequestId = require('express-request-id')() -const connectRedis = require('connect-redis') +const RedisStore = require('connect-redis').default const logger = require('../server/logger') const redis = require('../server/redis') @@ -110,7 +110,6 @@ module.exports = function server (inputCompanionOptions) { } if (companionOptions.redisUrl) { - const RedisStore = connectRedis(session) const redisClient = redis.client(companionOptions) // todo next major: change default prefix to something like "companion-session:" and possibly remove this option sessionOptions.store = new RedisStore({ client: redisClient, prefix: process.env.COMPANION_REDIS_EXPRESS_SESSION_PREFIX || 'sess:' }) diff --git a/yarn.lock b/yarn.lock index 8954724580..b42add41c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4714,6 +4714,13 @@ __metadata: languageName: node linkType: hard +"@ioredis/commands@npm:^1.1.1": + version: 1.2.0 + resolution: "@ioredis/commands@npm:1.2.0" + checksum: 9b20225ba36ef3e5caf69b3c0720597c3016cc9b1e157f519ea388f621dd9037177f84cfe7e25c4c32dad7dd90c70ff9123cd411f747e053cf292193c9c461e2 + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -7016,62 +7023,6 @@ __metadata: languageName: node linkType: hard -"@redis/bloom@npm:1.0.2": - version: 1.0.2 - resolution: "@redis/bloom@npm:1.0.2" - peerDependencies: - "@redis/client": ^1.0.0 - checksum: 4872e7e5e4ff03d63349ca88d3164d487f62805651ada91924de2592995993401c98a01cb93bff8d71e9a2e54985b2485b6cb0e084a7e8b1283e2ebb8bc4b833 - languageName: node - linkType: hard - -"@redis/client@npm:1.2.0": - version: 1.2.0 - resolution: "@redis/client@npm:1.2.0" - dependencies: - cluster-key-slot: 1.1.0 - generic-pool: 3.8.2 - yallist: 4.0.0 - checksum: 098a550a6728d9d3babb432a1c32f1678cbda5ad7fa3d59316fc334be42ef05d778fc4cf2e3d873a34817447870a5fc0486e62793698a279404b3b086ba7422e - languageName: node - linkType: hard - -"@redis/graph@npm:1.0.1": - version: 1.0.1 - resolution: "@redis/graph@npm:1.0.1" - peerDependencies: - "@redis/client": ^1.0.0 - checksum: 72e485efa416bdff10420f6e13c9cb4e1e5c70752e5172717adf62fc1d4d9ba12e708229fd87876f3a93270ff74c4bcd4d916987438dc36a94f7f12c9785fa44 - languageName: node - linkType: hard - -"@redis/json@npm:1.0.3": - version: 1.0.3 - resolution: "@redis/json@npm:1.0.3" - peerDependencies: - "@redis/client": ^1.0.0 - checksum: 26a7003c2fbacfa5998671e3a301cb2285432bf90f237adedcf76c0be0d379528e6710d469a8ea93c04bbd22951f9c2f41d460dbd79e85856f199248c4a250d5 - languageName: node - linkType: hard - -"@redis/search@npm:1.0.6": - version: 1.0.6 - resolution: "@redis/search@npm:1.0.6" - peerDependencies: - "@redis/client": ^1.0.0 - checksum: 5c776143520b11ae2e49a05e7fe3df514a01460f2be90759b15e4f097bf4a985784c48c2184ac2c275ced3ec5a0c77b208a4d46a50161d1ad6025e3ab2990aa7 - languageName: node - linkType: hard - -"@redis/time-series@npm:1.0.3": - version: 1.0.3 - resolution: "@redis/time-series@npm:1.0.3" - peerDependencies: - "@redis/client": ^1.0.0 - checksum: 4d11518185dd15f31c5b4a433902e53a3ebc24614a0221080ab12abf4f6fc60b3db00a71a83de7b4b10f11077de611dc1c273274573646d63481d40ca246f82d - languageName: node - linkType: hard - "@reduxjs/toolkit@npm:^1.9.3": version: 1.9.3 resolution: "@reduxjs/toolkit@npm:1.9.3" @@ -8869,30 +8820,6 @@ __metadata: languageName: node linkType: hard -"@types/connect-redis@npm:0.0.18": - version: 0.0.18 - resolution: "@types/connect-redis@npm:0.0.18" - dependencies: - "@types/express": "*" - "@types/express-session": "*" - "@types/ioredis": "*" - "@types/redis": ^2.8.0 - checksum: d65f0e4686cf482c3d580ebaba49817102578ed7cec1dd754132b097b320c7d1baae6b0e47a653b282b177d96807306fd59bb3b1af0a3875e6177fe4fb6d161b - languageName: node - linkType: hard - -"@types/connect-redis@patch:@types/connect-redis@npm:0.0.18#.yarn/patches/@types-connect-redis-npm-0.0.18-4fd2b614d3::locator=%40uppy-dev%2Fbuild%40workspace%3A.": - version: 0.0.18 - resolution: "@types/connect-redis@patch:@types/connect-redis@npm%3A0.0.18#.yarn/patches/@types-connect-redis-npm-0.0.18-4fd2b614d3::version=0.0.18&hash=060147&locator=%40uppy-dev%2Fbuild%40workspace%3A." - dependencies: - "@types/express": "*" - "@types/express-session": "*" - "@types/ioredis": "*" - "@types/redis": ^2.8.0 - checksum: 69f32b862305197678b77002ce36e6d45018cf54f66475338dfa0defc3aa89d66c9007693557778a414bbbdd388f67483702598e96c401fc2d1e974a87dce80f - languageName: node - linkType: hard - "@types/connect@npm:*": version: 3.4.35 resolution: "@types/connect@npm:3.4.35" @@ -9004,15 +8931,6 @@ __metadata: languageName: node linkType: hard -"@types/express-session@npm:*": - version: 1.17.5 - resolution: "@types/express-session@npm:1.17.5" - dependencies: - "@types/express": "*" - checksum: f6995f7720a18546bcb10cc707cf8c9c92455eb4319c0c50c57e9b9b10ed20dc379d74d5e4c3323fe4e924238b75e13c97822c9d81a80fa064ddc71654c1059d - languageName: node - linkType: hard - "@types/express-session@npm:1.17.3": version: 1.17.3 resolution: "@types/express-session@npm:1.17.3" @@ -9102,15 +9020,6 @@ __metadata: languageName: node linkType: hard -"@types/ioredis@npm:*": - version: 4.28.10 - resolution: "@types/ioredis@npm:4.28.10" - dependencies: - "@types/node": "*" - checksum: 0f2788cf25f490d3b345db8c5f8b8ce3f6c92cc99abcf744c8f974f02b9b3875233b3d22098614c462a0d6c41c523bd655509418ea88eb6249db6652290ce7cf - languageName: node - linkType: hard - "@types/is-empty@npm:^1.0.0": version: 1.2.1 resolution: "@types/is-empty@npm:1.2.1" @@ -9411,15 +9320,6 @@ __metadata: languageName: node linkType: hard -"@types/redis@npm:^2.8.0": - version: 2.8.32 - resolution: "@types/redis@npm:2.8.32" - dependencies: - "@types/node": "*" - checksum: 2b12103e05977941870c9a248f6ea51f4b7ad7e0f16a7403799c2ed1b3e63b60f693c39f9186be0ea02776934c4595ddcd2a5bde41e530aaad42d26449f6a669 - languageName: node - linkType: hard - "@types/request@npm:2.48.8": version: 2.48.8 resolution: "@types/request@npm:2.48.8" @@ -10499,7 +10399,6 @@ __metadata: "@aws-sdk/s3-presigned-post": ^3.338.0 "@aws-sdk/s3-request-presigner": ^3.338.0 "@types/compression": 1.7.0 - "@types/connect-redis": 0.0.18 "@types/cookie-parser": 1.4.2 "@types/cors": 2.8.6 "@types/eslint": ^8.2.0 @@ -10517,7 +10416,7 @@ __metadata: body-parser: 1.20.0 chalk: 4.1.2 common-tags: 1.8.2 - connect-redis: 6.1.3 + connect-redis: 7.1.0 content-disposition: ^0.5.4 cookie-parser: 1.4.6 cors: ^2.8.5 @@ -10534,6 +10433,7 @@ __metadata: grant: 5.4.21 helmet: ^4.6.0 into-stream: ^6.0.0 + ioredis: 5.3.2 ipaddr.js: ^2.0.1 jest: ^29.0.0 jsonwebtoken: 8.5.1 @@ -10546,7 +10446,6 @@ __metadata: nock: ^13.1.3 node-schedule: 2.1.0 prom-client: 14.0.1 - redis: 4.2.0 semver: 7.5.3 serialize-error: ^2.1.0 serialize-javascript: ^6.0.0 @@ -14578,10 +14477,10 @@ __metadata: languageName: node linkType: hard -"cluster-key-slot@npm:1.1.0": - version: 1.1.0 - resolution: "cluster-key-slot@npm:1.1.0" - checksum: fc953c75209b1ef9088081bab4e40a0b2586491c974ab93460569c014515ca5a2e31c043f185285e177007162fc353d07836d98f570c171dbe055775430e495b +"cluster-key-slot@npm:^1.1.0": + version: 1.1.2 + resolution: "cluster-key-slot@npm:1.1.2" + checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681 languageName: node linkType: hard @@ -14917,10 +14816,12 @@ __metadata: languageName: node linkType: hard -"connect-redis@npm:6.1.3": - version: 6.1.3 - resolution: "connect-redis@npm:6.1.3" - checksum: 1f61616e2ae7ad097b6553e45d683eeb309ac2e601ac49d721c6c0069fd96fbcfb46ee1c0e210b264b720dcd385201d30ff55ccf5deb11ee1529810890561b58 +"connect-redis@npm:7.1.0": + version: 7.1.0 + resolution: "connect-redis@npm:7.1.0" + peerDependencies: + express-session: ">=1" + checksum: fb493fae8910a2d61e3babd579c6344c56d7d31d67669d9941465ef00eb54ef9c1a35ccfa761136d36fa38d1f82ebe48c2b10888f292d55b4aadb8ecf1fddf34 languageName: node linkType: hard @@ -16181,6 +16082,13 @@ __metadata: languageName: node linkType: hard +"denque@npm:^2.1.0": + version: 2.1.0 + resolution: "denque@npm:2.1.0" + checksum: 1d4ae1d05e59ac3a3481e7b478293f4b4c813819342273f3d5b826c7ffa9753c520919ba264f377e09108d24ec6cf0ec0ac729a5686cbb8f32d797126c5dae74 + languageName: node + linkType: hard + "depd@npm:2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -19873,13 +19781,6 @@ __metadata: languageName: node linkType: hard -"generic-pool@npm:3.8.2": - version: 3.8.2 - resolution: "generic-pool@npm:3.8.2" - checksum: f549077d90265e5e4d32a2410205b357ec61cf73d17861f1013637984390e09fe7bf537129a2c6ed30ae57662a57c8d54194f80046408d3349836330f422dbde - languageName: node - linkType: hard - "gensync@npm:^1.0.0-beta.1, gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -21489,6 +21390,23 @@ __metadata: languageName: node linkType: hard +"ioredis@npm:5.3.2": + version: 5.3.2 + resolution: "ioredis@npm:5.3.2" + dependencies: + "@ioredis/commands": ^1.1.1 + cluster-key-slot: ^1.1.0 + debug: ^4.3.4 + denque: ^2.1.0 + lodash.defaults: ^4.2.0 + lodash.isarguments: ^3.1.0 + redis-errors: ^1.2.0 + redis-parser: ^3.0.0 + standard-as-callback: ^2.1.0 + checksum: 9a23559133e862a768778301efb68ae8c2af3c33562174b54a4c2d6574b976e85c75a4c34857991af733e35c48faf4c356e7daa8fb0a3543d85ff1768c8754bc + languageName: node + linkType: hard + "ip@npm:^1.1.5": version: 1.1.8 resolution: "ip@npm:1.1.8" @@ -24227,6 +24145,13 @@ __metadata: languageName: node linkType: hard +"lodash.defaults@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.defaults@npm:4.2.0" + checksum: 84923258235592c8886e29de5491946ff8c2ae5c82a7ac5cddd2e3cb697e6fbdfbbb6efcca015795c86eec2bb953a5a2ee4016e3735a3f02720428a40efbb8f1 + languageName: node + linkType: hard + "lodash.frompairs@npm:^4.0.1": version: 4.0.1 resolution: "lodash.frompairs@npm:4.0.1" @@ -24241,6 +24166,13 @@ __metadata: languageName: node linkType: hard +"lodash.isarguments@npm:^3.1.0": + version: 3.1.0 + resolution: "lodash.isarguments@npm:3.1.0" + checksum: ae1526f3eb5c61c77944b101b1f655f846ecbedcb9e6b073526eba6890dc0f13f09f72e11ffbf6540b602caee319af9ac363d6cdd6be41f4ee453436f04f13b5 + languageName: node + linkType: hard + "lodash.isboolean@npm:^3.0.3": version: 3.0.3 resolution: "lodash.isboolean@npm:3.0.3" @@ -30486,17 +30418,19 @@ __metadata: languageName: node linkType: hard -"redis@npm:4.2.0": - version: 4.2.0 - resolution: "redis@npm:4.2.0" +"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": + version: 1.2.0 + resolution: "redis-errors@npm:1.2.0" + checksum: f28ac2692113f6f9c222670735aa58aeae413464fd58ccf3fce3f700cae7262606300840c802c64f2b53f19f65993da24dc918afc277e9e33ac1ff09edb394f4 + languageName: node + linkType: hard + +"redis-parser@npm:^3.0.0": + version: 3.0.0 + resolution: "redis-parser@npm:3.0.0" dependencies: - "@redis/bloom": 1.0.2 - "@redis/client": 1.2.0 - "@redis/graph": 1.0.1 - "@redis/json": 1.0.3 - "@redis/search": 1.0.6 - "@redis/time-series": 1.0.3 - checksum: 6c35b56c6b685e82973c5698c5736c07ccbc59f3bc18d8de61e45ead2df4b8fc82062e5618452f4d3f8c23f02ff8c0b847c8d6a681f909c403a0fb96adcc2b98 + redis-errors: ^1.0.0 + checksum: 89290ae530332f2ae37577647fa18208d10308a1a6ba750b9d9a093e7398f5e5253f19855b64c98757f7129cccce958e4af2573fdc33bad41405f87f1943459a languageName: node linkType: hard @@ -32953,6 +32887,13 @@ __metadata: languageName: node linkType: hard +"standard-as-callback@npm:^2.1.0": + version: 2.1.0 + resolution: "standard-as-callback@npm:2.1.0" + checksum: 88bec83ee220687c72d94fd86a98d5272c91d37ec64b66d830dbc0d79b62bfa6e47f53b71646011835fc9ce7fae62739545d13124262b53be4fbb3e2ebad551c + languageName: node + linkType: hard + "start-server-and-test@npm:1.14.0": version: 1.14.0 resolution: "start-server-and-test@npm:1.14.0" @@ -36904,13 +36845,6 @@ __metadata: languageName: node linkType: hard -"yallist@npm:4.0.0, yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard - "yallist@npm:^2.1.2": version: 2.1.2 resolution: "yallist@npm:2.1.2" @@ -36925,6 +36859,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + "yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": version: 1.10.2 resolution: "yaml@npm:1.10.2"