{"analyzedAt":"2022-11-27T10:36:17.960Z","collected":{"metadata":{"name":"redis","scope":"unscoped","version":"4.5.1","description":"A modern, high performance Redis client","date":"2022-11-24T21:38:07.760Z","publisher":{"username":"leibale","email":"me@leibale.com"},"maintainers":[{"username":"gkorland","email":"gkorland@gmail.com"},{"username":"leibale","email":"me@leibale.com"},{"username":"mjr","email":"mjr@ranney.com"}],"repository":{"type":"git","url":"git://github.com/redis/node-redis.git"},"links":{"npm":"https://www.npmjs.com/package/redis","homepage":"https://github.com/redis/node-redis","repository":"https://github.com/redis/node-redis","bugs":"https://github.com/redis/node-redis/issues"},"license":"MIT","dependencies":{"@redis/bloom":"1.1.0","@redis/client":"1.4.2","@redis/graph":"1.1.0","@redis/json":"1.0.4","@redis/search":"1.1.0","@redis/time-series":"1.0.4"},"devDependencies":{"@tsconfig/node14":"^1.0.3","gh-pages":"^4.0.0","release-it":"^15.3.0","typescript":"^4.7.4"},"releases":[{"from":"2022-10-28T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":4},{"from":"2022-08-29T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":5},{"from":"2022-05-31T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":8},{"from":"2021-11-27T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":15},{"from":"2020-11-27T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":32}],"hasTestScript":true,"hasSelectiveFiles":true,"readme":"# Node-Redis\n\n[![Tests](https://img.shields.io/github/workflow/status/redis/node-redis/Tests/master.svg?label=tests)](https://github.com/redis/node-redis/actions/workflows/tests.yml)\n[![Coverage](https://codecov.io/gh/redis/node-redis/branch/master/graph/badge.svg?token=xcfqHhJC37)](https://codecov.io/gh/redis/node-redis)\n[![License](https://img.shields.io/github/license/redis/node-redis.svg)](https://github.com/redis/node-redis/blob/master/LICENSE)\n[![LGTM alerts](https://img.shields.io/lgtm/alerts/g/redis/node-redis.svg?logo=LGTM)](https://lgtm.com/projects/g/redis/node-redis/alerts)\n\n[![Discord](https://img.shields.io/discord/697882427875393627.svg?style=social&logo=discord)](https://discord.gg/redis)\n[![Twitch](https://img.shields.io/twitch/status/redisinc?style=social)](https://www.twitch.tv/redisinc)\n[![YouTube](https://img.shields.io/youtube/channel/views/UCD78lHSwYqMlyetR0_P4Vig?style=social)](https://www.youtube.com/redisinc)\n[![Twitter](https://img.shields.io/twitter/follow/redisinc?style=social)](https://twitter.com/redisinc)\n\nnode-redis is a modern, high performance [Redis](https://redis.io) client for Node.js.\n\n\n## Packages\n\n| Name                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                    |\n|----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [redis](./)                                  | [![Downloads](https://img.shields.io/npm/dm/redis.svg)](https://www.npmjs.com/package/redis) [![Version](https://img.shields.io/npm/v/redis.svg)](https://www.npmjs.com/package/redis)                                                                                                                                                                                                                                         |\n| [@redis/client](./packages/client)           | [![Downloads](https://img.shields.io/npm/dm/@redis/client.svg)](https://www.npmjs.com/package/@redis/client) [![Version](https://img.shields.io/npm/v/@redis/client.svg)](https://www.npmjs.com/package/@redis/client) [![Docs](https://img.shields.io/badge/-documentation-dc382c)](https://redis.js.org/documentation/client/)                                                                                               |\n| [@redis/bloom](./packages/bloom)             | [![Downloads](https://img.shields.io/npm/dm/@redis/bloom.svg)](https://www.npmjs.com/package/@redis/bloom) [![Version](https://img.shields.io/npm/v/@redis/bloom.svg)](https://www.npmjs.com/package/@redis/bloom) [![Docs](https://img.shields.io/badge/-documentation-dc382c)](https://redis.js.org/documentation/bloom/) [Redis Bloom](https://oss.redis.com/redisbloom/) commands                                          |\n| [@redis/graph](./packages/graph)             | [![Downloads](https://img.shields.io/npm/dm/@redis/graph.svg)](https://www.npmjs.com/package/@redis/graph) [![Version](https://img.shields.io/npm/v/@redis/graph.svg)](https://www.npmjs.com/package/@redis/graph) [![Docs](https://img.shields.io/badge/-documentation-dc382c)](https://redis.js.org/documentation/graph/) [Redis Graph](https://oss.redis.com/redisgraph/) commands                                          |\n| [@redis/json](./packages/json)               | [![Downloads](https://img.shields.io/npm/dm/@redis/json.svg)](https://www.npmjs.com/package/@redis/json) [![Version](https://img.shields.io/npm/v/@redis/json.svg)](https://www.npmjs.com/package/@redis/json) [![Docs](https://img.shields.io/badge/-documentation-dc382c)](https://redis.js.org/documentation/json/) [Redis JSON](https://oss.redis.com/redisjson/) commands                                                 |\n| [@redis/search](./packages/search)           | [![Downloads](https://img.shields.io/npm/dm/@redis/search.svg)](https://www.npmjs.com/package/@redis/search) [![Version](https://img.shields.io/npm/v/@redis/search.svg)](https://www.npmjs.com/package/@redis/search) [![Docs](https://img.shields.io/badge/-documentation-dc382c)](https://redis.js.org/documentation/search/) [RediSearch](https://oss.redis.com/redisearch/) commands                                    |\n| [@redis/time-series](./packages/time-series) | [![Downloads](https://img.shields.io/npm/dm/@redis/time-series.svg)](https://www.npmjs.com/package/@redis/time-series) [![Version](https://img.shields.io/npm/v/@redis/time-series.svg)](https://www.npmjs.com/package/@redis/time-series) [![Docs](https://img.shields.io/badge/-documentation-dc382c)](https://redis.js.org/documentation/time-series/) [Redis Time-Series](https://oss.redis.com/redistimeseries/) commands |\n\n> :warning: In version 4.1.0 we moved our subpackages from `@node-redis` to `@redis`. If you're just using `npm install redis`, you don't need to do anything—it'll upgrade automatically. If you're using the subpackages directly, you'll need to point to the new scope (e.g. `@redis/client` instead of `@node-redis/client`).\n\n## Installation\n\n```bash\nnpm install redis\n```\n\n> :warning: The new interface is clean and cool, but if you have an existing codebase, you'll want to read the [migration guide](./docs/v3-to-v4.md).\n\nLooking for a high-level library to handle object mapping? See [redis-om-node](https://github.com/redis/redis-om-node)!\n\n## Usage\n\n### Basic Example\n\n```typescript\nimport { createClient } from 'redis';\n\nconst client = createClient();\n\nclient.on('error', (err) => console.log('Redis Client Error', err));\n\nawait client.connect();\n\nawait client.set('key', 'value');\nconst value = await client.get('key');\nawait client.disconnect();\n```\n\nThe above code connects to localhost on port 6379. To connect to a different host or port, use a connection string in the format `redis[s]://[[username][:password]@][host][:port][/db-number]`:\n\n```typescript\ncreateClient({\n  url: 'redis://alice:foobared@awesome.redis.server:6380'\n});\n```\n\nYou can also use discrete parameters, UNIX sockets, and even TLS to connect. Details can be found in the [client configuration guide](./docs/client-configuration.md).\n\n### Redis Commands\n\nThere is built-in support for all of the [out-of-the-box Redis commands](https://redis.io/commands). They are exposed using the raw Redis command names (`HSET`, `HGETALL`, etc.) and a friendlier camel-cased version (`hSet`, `hGetAll`, etc.):\n\n```typescript\n// raw Redis commands\nawait client.HSET('key', 'field', 'value');\nawait client.HGETALL('key');\n\n// friendly JavaScript commands\nawait client.hSet('key', 'field', 'value');\nawait client.hGetAll('key');\n```\n\nModifiers to commands are specified using a JavaScript object:\n\n```typescript\nawait client.set('key', 'value', {\n  EX: 10,\n  NX: true\n});\n```\n\nReplies will be transformed into useful data structures:\n\n```typescript\nawait client.hGetAll('key'); // { field1: 'value1', field2: 'value2' }\nawait client.hVals('key'); // ['value1', 'value2']\n```\n\n`Buffer`s are supported as well:\n\n```typescript\nawait client.hSet('key', 'field', Buffer.from('value')); // 'OK'\nawait client.hGetAll(\n  commandOptions({ returnBuffers: true }),\n  'key'\n); // { field: <Buffer 76 61 6c 75 65> }\n```\n\n### Unsupported Redis Commands\n\nIf you want to run commands and/or use arguments that Node Redis doesn't know about (yet!) use `.sendCommand()`:\n\n```typescript\nawait client.sendCommand(['SET', 'key', 'value', 'NX']); // 'OK'\n\nawait client.sendCommand(['HGETALL', 'key']); // ['key1', 'field1', 'key2', 'field2']\n```\n\n### Transactions (Multi/Exec)\n\nStart a [transaction](https://redis.io/topics/transactions) by calling `.multi()`, then chaining your commands. When you're done, call `.exec()` and you'll get an array back with your results:\n\n```typescript\nawait client.set('another-key', 'another-value');\n\nconst [setKeyReply, otherKeyValue] = await client\n  .multi()\n  .set('key', 'value')\n  .get('another-key')\n  .exec(); // ['OK', 'another-value']\n```\n\nYou can also [watch](https://redis.io/topics/transactions#optimistic-locking-using-check-and-set) keys by calling `.watch()`. Your transaction will abort if any of the watched keys change.\n\nTo dig deeper into transactions, check out the [Isolated Execution Guide](./docs/isolated-execution.md).\n\n### Blocking Commands\n\nAny command can be run on a new connection by specifying the `isolated` option. The newly created connection is closed when the command's `Promise` is fulfilled.\n\nThis pattern works especially well for blocking commands—such as `BLPOP` and `BLMOVE`:\n\n```typescript\nimport { commandOptions } from 'redis';\n\nconst blPopPromise = client.blPop(\n  commandOptions({ isolated: true }),\n  'key',\n  0\n);\n\nawait client.lPush('key', ['1', '2']);\n\nawait blPopPromise; // '2'\n```\n\nTo learn more about isolated execution, check out the [guide](./docs/isolated-execution.md).\n\n### Pub/Sub\n\nSubscribing to a channel requires a dedicated stand-alone connection. You can easily get one by `.duplicate()`ing an existing Redis connection.\n\n```typescript\nconst subscriber = client.duplicate();\n\nawait subscriber.connect();\n```\n\nOnce you have one, simply subscribe and unsubscribe as needed:\n\n```typescript\nawait subscriber.subscribe('channel', (message) => {\n  console.log(message); // 'message'\n});\n\nawait subscriber.pSubscribe('channe*', (message, channel) => {\n  console.log(message, channel); // 'message', 'channel'\n});\n\nawait subscriber.unsubscribe('channel');\n\nawait subscriber.pUnsubscribe('channe*');\n```\n\nPublish a message on a channel:\n\n```typescript\nawait publisher.publish('channel', 'message');\n```\n\nThere is support for buffers as well:\n\n```typescript\nawait subscriber.subscribe('channel', (message) => {\n  console.log(message); // <Buffer 6d 65 73 73 61 67 65>\n}, true);\n\nawait subscriber.pSubscribe('channe*', (message, channel) => {\n  console.log(message, channel); // <Buffer 6d 65 73 73 61 67 65>, <Buffer 63 68 61 6e 6e 65 6c>\n}, true);\n```\n\n### Scan Iterator\n\n[`SCAN`](https://redis.io/commands/scan) results can be looped over using [async iterators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator):\n\n```typescript\nfor await (const key of client.scanIterator()) {\n  // use the key!\n  await client.get(key);\n}\n```\n\nThis works with `HSCAN`, `SSCAN`, and `ZSCAN` too:\n\n```typescript\nfor await (const { field, value } of client.hScanIterator('hash')) {}\nfor await (const member of client.sScanIterator('set')) {}\nfor await (const { score, value } of client.zScanIterator('sorted-set')) {}\n```\n\nYou can override the default options by providing a configuration object:\n\n```typescript\nclient.scanIterator({\n  TYPE: 'string', // `SCAN` only\n  MATCH: 'patter*',\n  COUNT: 100\n});\n```\n\n### [Programmability](https://redis.io/docs/manual/programmability/)\n\nRedis provides a programming interface allowing code execution on the redis server.\n\n#### [Functions](https://redis.io/docs/manual/programmability/functions-intro/)\n\nThe following example retrieves a key in redis, returning the value of the key, incremented by an integer. For example, if your key _foo_ has the value _17_ and we run `add('foo', 25)`, it returns the answer to Life, the Universe and Everything.\n\n```lua\n#!lua name=library\n\nredis.register_function {\n  function_name = 'add',\n  callback = function(keys, args) return redis.call('GET', keys[1]) + args[1] end,\n  flags = { 'no-writes' }\n}\n```\n\nHere is the same example, but in a format that can be pasted into the `redis-cli`.\n\n```\nFUNCTION LOAD \"#!lua name=library\\nredis.register_function{function_name=\\\"add\\\", callback=function(keys, args) return redis.call('GET', keys[1])+args[1] end, flags={\\\"no-writes\\\"}}\"\n```\n\nLoad the prior redis function on the _redis server_ before running the example below.\n\n```typescript\nimport { createClient } from 'redis';\n\nconst client = createClient({\n  functions: {\n    library: {\n      add: {\n        NUMBER_OF_KEYS: 1,\n        transformArguments(key: string, toAdd: number): Array<string> {\n          return [key, toAdd.toString()];\n        },\n        transformReply(reply: number): number {\n          return reply;\n        }\n      }\n    }\n  }\n});\n\nawait client.connect();\n\nawait client.set('key', '1');\nawait client.library.add('key', 2); // 3\n```\n\n#### [Lua Scripts](https://redis.io/docs/manual/programmability/eval-intro/)\n\nThe following is an end-to-end example of the prior concept.\n\n```typescript\nimport { createClient, defineScript } from 'redis';\n\nconst client = createClient({\n  scripts: {\n    add: defineScript({\n      NUMBER_OF_KEYS: 1,\n      SCRIPT:\n        'return redis.call(\"GET\", KEYS[1]) + ARGV[1];',\n      transformArguments(key: string, toAdd: number): Array<string> {\n        return [key, toAdd.toString()];\n      },\n      transformReply(reply: number): number {\n        return reply;\n      }\n    })\n  }\n});\n\nawait client.connect();\n\nawait client.set('key', '1');\nawait client.add('key', 2); // 3\n```\n\n### Disconnecting\n\nThere are two functions that disconnect a client from the Redis server. In most scenarios you should use `.quit()` to ensure that pending commands are sent to Redis before closing a connection.\n\n#### `.QUIT()`/`.quit()`\n\nGracefully close a client's connection to Redis, by sending the [`QUIT`](https://redis.io/commands/quit) command to the server. Before quitting, the client executes any remaining commands in its queue, and will receive replies from Redis for each of them.\n\n```typescript\nconst [ping, get, quit] = await Promise.all([\n  client.ping(),\n  client.get('key'),\n  client.quit()\n]); // ['PONG', null, 'OK']\n\ntry {\n  await client.get('key');\n} catch (err) {\n  // ClosedClient Error\n}\n```\n\n#### `.disconnect()`\n\nForcibly close a client's connection to Redis immediately. Calling `disconnect` will not send further pending commands to the Redis server, or wait for or parse outstanding responses.\n\n```typescript\nawait client.disconnect();\n```\n\n### Auto-Pipelining\n\nNode Redis will automatically pipeline requests that are made during the same \"tick\".\n\n```typescript\nclient.set('Tm9kZSBSZWRpcw==', 'users:1');\nclient.sAdd('users:1:tokens', 'Tm9kZSBSZWRpcw==');\n```\n\nOf course, if you don't do something with your Promises you're certain to get [unhandled Promise exceptions](https://nodejs.org/api/process.html#process_event_unhandledrejection). To take advantage of auto-pipelining and handle your Promises, use `Promise.all()`.\n\n```typescript\nawait Promise.all([\n  client.set('Tm9kZSBSZWRpcw==', 'users:1'),\n  client.sAdd('users:1:tokens', 'Tm9kZSBSZWRpcw==')\n]);\n```\n\n### Clustering\n\nCheck out the [Clustering Guide](./docs/clustering.md) when using Node Redis to connect to a Redis Cluster.\n\n### Events\n\nThe Node Redis client class is an Nodejs EventEmitter and it emits an event each time the network status changes:\n\n| Event name     | Scenes                                                                                                            | Arguments to be passed to the listener                                                                                                         |\n|----------------|-------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|\n| `connect`      | The client is initiating a connection to the server.                                                              | _No argument_                                                                                                                                  |\n| `ready`        | The client successfully initiated the connection to the server.                                                   | _No argument_                                                                                                                                  |\n| `end`          | The client disconnected the connection to the server via `.quit()` or `.disconnect()`.                            | _No argument_                                                                                                                                  |\n| `error`        | When a network error has occurred, such as unable to connect to the server or the connection closed unexpectedly. | 1 argument: The error object, such as `SocketClosedUnexpectedlyError: Socket closed unexpectedly` or `Error: connect ECONNREFUSED [IP]:[PORT]` |\n| `reconnecting` | The client is trying to reconnect to the server.                                                                  | _No argument_                                                                                                                                  |\n\nThe client will not emit [any other events](./docs/v3-to-v4.md#all-the-removed-events) beyond those listed above.\n\n## Supported Redis versions\n\nNode Redis is supported with the following versions of Redis:\n\n| Version | Supported          |\n|---------|--------------------|\n| 7.0.z   | :heavy_check_mark: |\n| 6.2.z   | :heavy_check_mark: |\n| 6.0.z   | :heavy_check_mark: |\n| 5.0.z   | :heavy_check_mark: |\n| < 5.0   | :x:                |\n\n> Node Redis should work with older versions of Redis, but it is not fully tested and we cannot offer support.\n\n## Contributing\n\nIf you'd like to contribute, check out the [contributing guide](CONTRIBUTING.md).\n\nThank you to all the people who already contributed to Node Redis!\n\n[![Contributors](https://contrib.rocks/image?repo=redis/node-redis)](https://github.com/redis/node-redis/graphs/contributors)\n\n## License\n\nThis repository is licensed under the \"MIT\" license. See [LICENSE](LICENSE)."},"npm":{"downloads":[{"from":"2022-11-26T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":131133},{"from":"2022-11-20T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":2715919},{"from":"2022-10-28T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":12614897},{"from":"2022-08-29T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":37836925},{"from":"2022-05-31T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":74159729},{"from":"2021-11-27T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":143032762}],"starsCount":444},"github":{"homepage":"https://redis.js.org/","starsCount":15687,"forksCount":1742,"subscribersCount":301,"issues":{"count":2316,"openCount":213,"distribution":{"3600":267,"10800":108,"32400":161,"97200":202,"291600":222,"874800":237,"2624400":221,"7873200":265,"23619600":217,"70858800":263,"212576400":153},"isDisabled":false},"contributors":[{"username":"leibale","commitsCount":376},{"username":"mranney","commitsCount":212},{"username":"brycebaril","commitsCount":61},{"username":"Salakar","commitsCount":60},{"username":"simonprickett","commitsCount":49},{"username":"DTrejo","commitsCount":34},{"username":"tj","commitsCount":27},{"username":"BridgeAR","commitsCount":17},{"username":"gkorland","commitsCount":12},{"username":"Avital-Fine","commitsCount":12},{"username":"tim-smart","commitsCount":9},{"username":"JerrySievert","commitsCount":8},{"username":"pietern","commitsCount":7},{"username":"greenkeeperio-bot","commitsCount":7},{"username":"stockholmux","commitsCount":6},{"username":"chayim","commitsCount":6},{"username":"dvv","commitsCount":5},{"username":"ralexstokes","commitsCount":5},{"username":"raydog","commitsCount":5},{"username":"ricsam","commitsCount":5},{"username":"shin-","commitsCount":4},{"username":"tomaszdurka","commitsCount":4},{"username":"thanpolas","commitsCount":4},{"username":"migounette","commitsCount":4},{"username":"paddybyers","commitsCount":4},{"username":"AvitalFineRedis","commitsCount":4},{"username":"guyroyse","commitsCount":4},{"username":"dependabot[bot]","commitsCount":4},{"username":"technoweenie","commitsCount":3},{"username":"bnoguchi","commitsCount":3},{"username":"trobrock","commitsCount":3},{"username":"roamm","commitsCount":3},{"username":"jeffbski","commitsCount":3},{"username":"mciparelli","commitsCount":3},{"username":"bobrik","commitsCount":3},{"username":"jackhftang","commitsCount":3},{"username":"bcoe","commitsCount":3},{"username":"tmarshall","commitsCount":3},{"username":"Apollon77","commitsCount":3},{"username":"andy-ganchrow","commitsCount":3},{"username":"evert","commitsCount":3},{"username":"HeCorr","commitsCount":3},{"username":"dajinchu","commitsCount":3},{"username":"shashank19aug","commitsCount":3},{"username":"rohan201","commitsCount":3},{"username":"aditya-rastogi23","commitsCount":3},{"username":"radiantly","commitsCount":3},{"username":"SuzeShardlow","commitsCount":3},{"username":"mustard-mh","commitsCount":3},{"username":"AnnAngela","commitsCount":3},{"username":"redsquirrel","commitsCount":2},{"username":"felixge","commitsCount":2},{"username":"orls","commitsCount":2},{"username":"marcuswestin","commitsCount":2},{"username":"TEHEK","commitsCount":2},{"username":"holic","commitsCount":2},{"username":"janm6k","commitsCount":2},{"username":"jifeng","commitsCount":2},{"username":"notatestuser","commitsCount":2},{"username":"hpeinar","commitsCount":2},{"username":"whockey","commitsCount":2},{"username":"Raynos","commitsCount":2},{"username":"mouna-apperson","commitsCount":2},{"username":"Radagaisus","commitsCount":2},{"username":"ivanB1975","commitsCount":2},{"username":"komachi","commitsCount":2},{"username":"BrianRossmajer","commitsCount":2},{"username":"calebboyd","commitsCount":2},{"username":"Fl4m3Ph03n1x","commitsCount":2},{"username":"betimer","commitsCount":2},{"username":"bengl","commitsCount":2},{"username":"mrsegen","commitsCount":2},{"username":"hanksims","commitsCount":1},{"username":"paulcarey","commitsCount":1},{"username":"nithesh","commitsCount":1},{"username":"AndrewRayCode","commitsCount":1},{"username":"umairsiddique","commitsCount":1},{"username":"jhpinson","commitsCount":1},{"username":"maks","commitsCount":1},{"username":"dayananda-n","commitsCount":1},{"username":"zzak","commitsCount":1},{"username":"isaacs","commitsCount":1},{"username":"bluesmoon","commitsCount":1},{"username":"jed","commitsCount":1},{"username":"jdavisp3","commitsCount":1},{"username":"ignacio","commitsCount":1},{"username":"lpinca","commitsCount":1},{"username":"mjackson","commitsCount":1},{"username":"niteshsinha","commitsCount":1},{"username":"england","commitsCount":1},{"username":"squamos","commitsCount":1},{"username":"kwangsu61","commitsCount":1},{"username":"barshow","commitsCount":1},{"username":"mathieumg","commitsCount":1},{"username":"paulvi","commitsCount":1},{"username":"othiym23","commitsCount":1},{"username":"marekventur","commitsCount":1},{"username":"slaskis","commitsCount":1},{"username":"mohit","commitsCount":1},{"username":"charlesfeng","commitsCount":1}],"commits":[{"from":"2022-11-20T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":7},{"from":"2022-10-28T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":25},{"from":"2022-08-29T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":41},{"from":"2022-05-31T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":66},{"from":"2021-11-27T00:00:00.000Z","to":"2022-11-27T00:00:00.000Z","count":260}]},"source":{"files":{"readmeSize":18278,"testsSize":575218,"hasNpmIgnore":true,"hasChangelog":true},"badges":[{"urls":{"original":"https://img.shields.io/npm/dm/redis.svg","shields":"https://img.shields.io/npm/dm/redis.svg","content":"https://img.shields.io/npm/dm/redis.json"},"info":{"service":"npm","type":"downloads","modifiers":{"type":"dm"}}},{"urls":{"original":"https://img.shields.io/npm/v/redis.svg","shields":"https://img.shields.io/npm/v/redis.svg","content":"https://img.shields.io/npm/v/redis.json"},"info":{"service":"npm","type":"version","modifiers":{"type":"v"}}},{"urls":{"original":"https://img.shields.io/npm/dm/@redis/client.svg","shields":"https://img.shields.io/npm/dm/@redis/client.svg","content":"https://img.shields.io/npm/dm/@redis/client.json"},"info":{"service":"npm","type":"downloads","modifiers":{"type":"dm"}}},{"urls":{"original":"https://img.shields.io/npm/v/@redis/client.svg","shields":"https://img.shields.io/npm/v/@redis/client.svg","content":"https://img.shields.io/npm/v/@redis/client.json"},"info":{"service":"npm","type":"version","modifiers":{"type":"v"}}},{"urls":{"original":"https://img.shields.io/npm/dm/@redis/bloom.svg","shields":"https://img.shields.io/npm/dm/@redis/bloom.svg","content":"https://img.shields.io/npm/dm/@redis/bloom.json"},"info":{"service":"npm","type":"downloads","modifiers":{"type":"dm"}}},{"urls":{"original":"https://img.shields.io/npm/v/@redis/bloom.svg","shields":"https://img.shields.io/npm/v/@redis/bloom.svg","content":"https://img.shields.io/npm/v/@redis/bloom.json"},"info":{"service":"npm","type":"version","modifiers":{"type":"v"}}},{"urls":{"original":"https://img.shields.io/npm/dm/@redis/graph.svg","shields":"https://img.shields.io/npm/dm/@redis/graph.svg","content":"https://img.shields.io/npm/dm/@redis/graph.json"},"info":{"service":"npm","type":"downloads","modifiers":{"type":"dm"}}},{"urls":{"original":"https://img.shields.io/npm/v/@redis/graph.svg","shields":"https://img.shields.io/npm/v/@redis/graph.svg","content":"https://img.shields.io/npm/v/@redis/graph.json"},"info":{"service":"npm","type":"version","modifiers":{"type":"v"}}},{"urls":{"original":"https://img.shields.io/npm/dm/@redis/json.svg","shields":"https://img.shields.io/npm/dm/@redis/json.svg","content":"https://img.shields.io/npm/dm/@redis/json.json"},"info":{"service":"npm","type":"downloads","modifiers":{"type":"dm"}}},{"urls":{"original":"https://img.shields.io/npm/v/@redis/json.svg","shields":"https://img.shields.io/npm/v/@redis/json.svg","content":"https://img.shields.io/npm/v/@redis/json.json"},"info":{"service":"npm","type":"version","modifiers":{"type":"v"}}},{"urls":{"original":"https://img.shields.io/npm/dm/@redis/search.svg","shields":"https://img.shields.io/npm/dm/@redis/search.svg","content":"https://img.shields.io/npm/dm/@redis/search.json"},"info":{"service":"npm","type":"downloads","modifiers":{"type":"dm"}}},{"urls":{"original":"https://img.shields.io/npm/v/@redis/search.svg","shields":"https://img.shields.io/npm/v/@redis/search.svg","content":"https://img.shields.io/npm/v/@redis/search.json"},"info":{"service":"npm","type":"version","modifiers":{"type":"v"}}},{"urls":{"original":"https://img.shields.io/npm/dm/@redis/time-series.svg","shields":"https://img.shields.io/npm/dm/@redis/time-series.svg","content":"https://img.shields.io/npm/dm/@redis/time-series.json"},"info":{"service":"npm","type":"downloads","modifiers":{"type":"dm"}}},{"urls":{"original":"https://img.shields.io/npm/v/@redis/time-series.svg","shields":"https://img.shields.io/npm/v/@redis/time-series.svg","content":"https://img.shields.io/npm/v/@redis/time-series.json"},"info":{"service":"npm","type":"version","modifiers":{"type":"v"}}}],"coverage":0.96}},"evaluation":{"quality":{"carefulness":0.8699999999999999,"tests":0.744,"health":1,"branding":0.6},"popularity":{"communityInterest":18274,"downloadsCount":12612308.333333334,"downloadsAcceleration":12188.47486681887,"dependentsCount":0},"maintenance":{"releasesFrequency":1,"commitsFrequency":1,"openIssues":1,"issuesDistribution":0}},"score":{"final":0.7593648174250369,"detail":{"quality":0.9497662212683973,"popularity":0.6888617648890987,"maintenance":0.6666666666666666}}}