{"_id":"stale-lru-cache","_rev":"20-bf6271cd7c5d08128fb8c82bb6f3b752","name":"stale-lru-cache","time":{"modified":"2022-06-26T23:42:51.302Z","created":"2015-12-03T00:36:03.203Z","4.0.0":"2015-12-03T00:36:03.203Z","3.2.0":"2015-12-03T10:54:35.154Z","4.0.1":"2015-12-03T11:02:31.935Z","4.0.2":"2015-12-03T13:31:47.493Z","4.1.0":"2015-12-05T14:05:05.533Z","4.1.1":"2015-12-05T18:47:29.074Z","4.2.0":"2015-12-18T13:25:22.249Z","4.2.1":"2015-12-18T13:35:28.605Z","5.0.0":"2016-02-01T12:47:40.815Z","5.0.1":"2016-02-08T11:27:03.904Z","5.0.2":"2016-02-17T21:01:10.147Z","5.1.0":"2016-12-02T23:30:56.723Z","5.1.1":"2016-12-16T19:10:16.716Z"},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"dist-tags":{"latest":"5.1.1"},"description":"Resilient and performant in-memory cache for node.js","readme":"# Stale LRU Cache\n\n[![Version](https://img.shields.io/npm/v/stale-lru-cache.svg)](https://www.npmjs.com/package/stale-lru-cache)\n[![License](https://img.shields.io/npm/l/stale-lru-cache.svg)](https://www.npmjs.com/package/stale-lru-cache)\n[![Build Status](https://travis-ci.org/cyberthom/stale-lru-cache.svg?branch=master)](https://travis-ci.org/cyberthom/stale-lru-cache)\n[![Test Coverage](https://coveralls.io/repos/cyberthom/stale-lru-cache/badge.svg?branch=master&service=github)](https://coveralls.io/github/cyberthom/stale-lru-cache?branch=master)\n\nResilient and performant in-memory cache for node.js.\n\n##### Features\n\n* Hides refresh latency and shields against errors using background revalidation.\n* Allows HTTP resources to define their own caching policy using Cache-Control headers.\n* Optimises hit-ratio by discarding least recently used items first.\n\n\n## Overview\n\n##### Installation\n\n```\nnpm install --save stale-lru-cache\n```\n\n##### Basic Usage\n\n```javascript\nvar Cache = require('stale-lru-cache');\n\nvar cache = new Cache({\n    maxSize: 100,\n    maxAge: 600,\n    staleWhileRevalidate: 86400,\n    revalidate: function (key, callback) {\n        fetchSomeAsyncData(callback);\n    }\n});\n\ncache.set('key', 'value'); // true\ncache.get('key'); // 'value'\n```\n\n##### HTTP Request Caching\n\n```javascript\n// Get response from cache\ncache.wrap('http://www.google.com', revalidate, function (error, html) {\n    // Do something with cached response\n});\n\n// Only called to fetch the initial response and when the item becomes stale\nfunction revalidate(url, callback) {\n    request(url, function (error, response, html) {\n        if (error) return callback(error);\n        callback(null, html, response.headers['cache-control']);\n    });\n}\n```\n\n\n## Background Revalidation\n\nUnless you're able to cache resources forever, use `maxAge` together with `staleWhileRevalidate` to get fault-tolerant, zero-latency cache refreshes.\n\n![revalidate flow](https://dl.dropboxusercontent.com/u/61352/stale-lru-cache/stale-while-revalidate.svg)\n\nIn the example above:\n\n* Request 1 is served from cache.\n* Request 2 is also served from cache but has become stale so will kick of revalidation in the background.\n* Request 3 continues to be served from cache.\n* Once a response from origin has been received the cache is refreshed.\n* Request 4 is served from cache with the refreshed value.\n\n\n## API Reference\n\n* [`Cache()`](#cacheoptions)\n* [`.delete()`](#deletekey)\n* [`.get()`](#getkey)\n* [`.has()`](#haskey)\n* [`.isStale()`](#isstalekey)\n* [`.keys()`](#keys)\n* [`.reset()`](#reset)\n* [`.set()`](#setkey-value-options)\n* [`.size`](#size)\n* [`.values()`](#values)\n* [`.wrap()`](#wrapkey-revalidate-callback)\n\n### `Cache(options)`\n\nCreates and returns a new Cache instance.\n\n##### Parameters\n\n* `options.maxAge` - Time in seconds after which items will expire. *(default: Infinity)*\n* `options.staleWhileRevalidate` - Time in seconds, after `maxAge` has expired, when items are marked as stale but still usable. *(default: 0)*\n* `options.revalidate(key, callback(error, value, [options]))` - Function that refreshes items in the background after they become stale.\n* `options.maxSize` - Maximum cache size. *(default: Infinity)*\n* `options.getSize(value, key)` - Function used to calculate the length of each stored item. *(default: 1)*\n\n---\n\n### `delete(key)`\n\nRemoves the specified item from the cache.\n\nReturns `true` if an item existed and has been removed, or `false` if the item does not exist.\n\n---\n\n### `get(key)`\n\nReturns the value associated with the specified key, or `undefined` if the item does not exist.\n\n---\n\n### `has(key)`\n\nReturns `true` if an item with the specified key exists (may be fresh or stale), or `false` otherwise.\n\n---\n\n### `isStale(key)`\n\nReturns `true` if an item with the specified key exists and is stale, or `false` otherwise.\n\n---\n\n### `keys()`\n\nReturns an array with all keys stored in the cache.\n\n---\n\n### `reset()`\n\nRemoves all items from the cache.\n\nOutstanding background refreshes will not be cleared to ensure that all queued `revalidate` callbacks are honoured.\n\n---\n\n### `set(key, value, [options])`\n\nInserts a new item with the specified `key` and `value`.\n\nReturns `true` if the item has been inserted, or `false` otherwise.\n\n##### Parameters\n\n* `key` - **Required.** The key of the item to be inserted. (both objects and primitives may be used)\n* `value` - **Required.** The value of the item to be inserted. (both objects and primitives may be used)\n* `options` - Item specific Cache-Control string or options object.\n* `options.maxAge` - Time in seconds after which the item will expire.\n* `options.staleWhileRevalidate` - Time in seconds, after `maxAge` has expired, when the item is marked as stale but still usable.\n* `options.revalidate(key, callback(error, value, [options]))` - Function that refreshes the item in the background after it becomes stale.\n\n##### Examples\n\n```javascript\ncache.set('key', 'value'); // true\n\ncache.set('key', 'value', { maxAge: 600, staleWhileRevalidate: 86400 }); // true\ncache.set('key', 'value', { maxAge: 0 }); // false\n\ncache.set('key', 'value', 'max-age=600, stale-while-revalidate=86400'); // true\ncache.set('key', 'value', 'no-cache, no-store, must-revalidate'); // false\n```\n\n##### Cache-Control Behaviour\n\n* `max-age=600, must-revalidate` - Will be cached for 10 minutes and removed afterwards\n* `max-age=600, stale-while-revalidate=86400` - Will be cached for 10 minutes and then refreshed in the background if the item is accessed again within a time window of 1 day\n* `max-age=0` - Will not be cached\n* `no-cache, no-store, must-revalidate` - Will not be cached\n* `private` - Will not be cached\n* `public` - Will be cached using default `maxAge` and `staleWhileRevalidate` options\n\n---\n\n### `size`\n\nProperty indicating the size of all stored items in the cache. This is calculated using `getSize` options function.\n\n---\n\n### `values()`\n\nReturns an array with all values stored in the cache.\n\n---\n\n### `wrap(key, revalidate, callback)`\n\nHelper used to simplify caching the response of an asynchronous operation.\n\nIf an item with the specified key exists `callback` will receive its value immediately. Otherwise `revalidate` is used\nto fetch the initial value. If successful the item is cached and automatically revalidated when it becomes stale.\n\n##### Parameters\n\n* `key` - **Required.** The key of the item to be wrapped. (both objects and primitives may be used)\n* `revalidate(key, callback(error, value, [options]))` - **Required.** Function that fetches the initial value and refreshes the item in the background after it becomes stale.\n* `callback(error, value, [options])` - **Required.** Function that recieves the cached value of the wrapped item.\n\n##### Example\n\n```javascript\ncache.wrap('key', revalidate, function (error, value) {\n    // Do something with cached value\n});\n\nfunction revalidate(key, callback) {\n    readFromDB(function (error, value) {\n        if (error) return callback(error);\n        callback(null, value);\n    });\n}\n```\n\n\n## Performance\n\nInserting 1,000,000 records:\n\n| Module                  |      Duration |  Memory Usage |         More       |\n| :---------------------- | ------------: | ------------: | :----------------: |\n| `stale-lru-cache@5.0.0` |      6,452 ms |       0.40 GB | [Full Results][01] |\n| `fast-lru@3.0.1`        |      7,877 ms |       0.31 GB | [Full Results][02] |\n| `lru-cache@4.0.0`       |      8,151 ms |       0.43 GB | [Full Results][03] |\n| `node-cache@3.1.0`      |     11,450 ms |       0.71 GB | [Full Results][04] |\n| `lru-cache@3.2.0`       |    100,000 ms |     *timeout* | [Full Results][05] |\n| `storage-lru@0.1.1`     |    100,000 ms |     *timeout* | [Full Results][06] |\n\nReading 1,000,000 records:\n\n| Module                  |      Duration |         More       |\n| :---------------------- | ------------: | :----------------: |\n| `lru-cache@4.0.0`       |        279 ms | [Full Results][07] |\n| `stale-lru-cache@5.0.0` |        331 ms | [Full Results][08] |\n| `fast-lru@3.0.1`        |        455 ms | [Full Results][09] |\n| `node-cache@3.1.0`      |      1,940 ms | [Full Results][10] |\n| `storage-lru@0.1.1`     |     20,612 ms | [Full Results][11] |\n| `lru-cache@3.2.0`       |     48,593 ms | [Full Results][12] |\n\nTested on `node v4.2.1`.\n\n[01]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/stale-lru-cache@latest--insert-time.tsv\n[02]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/fast-lru@3.0.1--insert-time.tsv\n[03]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/lru-cache@4.0.0--insert-time.tsv\n[04]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/node-cache@3.1.0--insert-time.tsv\n[05]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/lru-cache@3.2.0--insert-time.tsv\n[06]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/storage-lru@0.1.1--insert-time.tsv\n\n[07]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/lru-cache@4.0.0--read-time.tsv\n[08]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/stale-lru-cache@latest--read-time.tsv\n[09]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/fast-lru@3.0.1--read-time.tsv\n[10]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/node-cache@3.1.0--read-time.tsv\n[11]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/storage-lru@0.1.1--read-time.tsv\n[12]: https://github.com/cyberthom/stale-lru-cache/blob/master/benchmark/results/lru-cache@3.2.0--read-time.tsv\n","versions":{"4.0.1":{"name":"stale-lru-cache","description":"Fork of lru-cache that adds support for stale-while-revalidate cache control","version":"4.0.1","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["mru","lru","cache","stale-while-revalidate","stale","revalidate","cache-control"],"scripts":{"test":"tap test --gc"},"main":"lib/lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"devDependencies":{"tap":"^2.3.1","weak":""},"license":"ISC","dependencies":{"parse-cache-control":"^1.0.1","pseudomap":"^1.0.1"},"gitHead":"8acd2ee2307ecf79f6d9af4d2ae98f8013b333cb","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@4.0.1","_shasum":"047ea78a02a409db1cc16b4f0055ed751528ac27","_from":".","_npmVersion":"2.14.4","_nodeVersion":"0.12.7","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"047ea78a02a409db1cc16b4f0055ed751528ac27","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-4.0.1.tgz","integrity":"sha512-mKnTab5E6UeJqvrnycAda23i/Z90QW/UscCqXqcTtavfFbfQ10zn4uK2D7JwbZxeBKnwt0/GSfrGVD9amvEQew==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDz0y6T41YfTEWtmpHcf9Of/SENAdH9x2ZepuboxNRTuAiEAri2vSfMIeQJQJBI8qs7qKuCjyAXjs7/DoABx06rksqc="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"deprecated":"critical performance issue fixed in v5.0.0"},"4.0.2":{"name":"stale-lru-cache","description":"Fork of lru-cache that adds support for stale-while-revalidate cache control","version":"4.0.2","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["mru","lru","cache","stale-while-revalidate","stale","revalidate","cache-control"],"scripts":{"test":"tap test --gc"},"main":"lib/lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"devDependencies":{"tap":"^2.3.1","weak":""},"license":"ISC","dependencies":{"parse-cache-control":"^1.0.1","pseudomap":"^1.0.1"},"gitHead":"7a6ff6876a7df2e18254f30a48017d3a5952372f","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@4.0.2","_shasum":"3e687a2de30b9ad6dcd5500a5fd633caf58112e0","_from":".","_npmVersion":"2.14.4","_nodeVersion":"0.12.7","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"3e687a2de30b9ad6dcd5500a5fd633caf58112e0","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-4.0.2.tgz","integrity":"sha512-l1ptqWakOgPFJicVP/8ifyV2B0ZpNXn6QrJVukGN9gjReISeCh+9EUHOILOjU2Sa6ACI5lIcod0tnucyU2Y4Nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJf+NPKUuBLfCYylzVzd7QD5W9WrM0TAloUDvrdFgo0AiEA9IBxT57sCjajoCi24a3E3sA6bDY3jp99DXR/NwxtlTI="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"deprecated":"critical performance issue fixed in v5.0.0"},"4.1.0":{"name":"stale-lru-cache","description":"Fork of lru-cache that adds support for stale-while-revalidate cache control","version":"4.1.0","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["mru","lru","cache","stale-while-revalidate","stale","revalidate","cache-control"],"scripts":{"test":"tap test --gc"},"main":"lib/lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"devDependencies":{"tap":"^2.3.1","weak":""},"license":"ISC","dependencies":{"parse-cache-control":"^1.0.1","pseudomap":"^1.0.1"},"gitHead":"5dcaf606fccadb7c45695b41e548c49249019117","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@4.1.0","_shasum":"0ebf66944e230e3287a85a728bca1aaac6caf9c9","_from":".","_npmVersion":"2.14.4","_nodeVersion":"0.12.7","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"0ebf66944e230e3287a85a728bca1aaac6caf9c9","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-4.1.0.tgz","integrity":"sha512-ejfvmYjk9rlLC6A0s/1Js50bv6ep25QPz/YOBYUOeQ8TguLWSpLeX6WZrALl5NU8vZsBHrhEH1QbdWTWAsvuvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID1GLG3pCDtdPmje1UJIKQzTIdPk2Ee9ma6zqiBnPtbGAiEA5AVXRGPt3k5CkRxnRHTdlO3rFWVysoBg2NUbshgoMMY="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"deprecated":"critical performance issue fixed in v5.0.0"},"4.1.1":{"name":"stale-lru-cache","description":"Fork of lru-cache that adds support for stale-while-revalidate cache control","version":"4.1.1","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["mru","lru","cache","stale-while-revalidate","stale","revalidate","cache-control"],"scripts":{"test":"tap test --gc"},"main":"lib/lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"devDependencies":{"tap":"^2.3.1","weak":""},"license":"ISC","dependencies":{"parse-cache-control":"^1.0.1","pseudomap":"^1.0.1"},"gitHead":"d3822cc4471ec3d078780fa4564eca3bea7d273d","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@4.1.1","_shasum":"fa54ee1a004b9f29123ae59837a4ace614982ec9","_from":".","_npmVersion":"2.14.4","_nodeVersion":"0.12.7","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"fa54ee1a004b9f29123ae59837a4ace614982ec9","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-4.1.1.tgz","integrity":"sha512-F6HJrWiZ8yfFT32CoWmS67b63eLjGTk6i1O0/1FGwCHhRLkklihrAyabr33VZ9lkp5v66XDyr3+ITAD4bJZJxw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICIobBCiJBEjsGfLpc2jrkGRG/NpBCT/UyYzWFBJ02o2AiBLbb+eXJqCkh6prDg2tiegkXpohpmR60VFLgtGhOyEfA=="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"deprecated":"critical performance issue fixed in v5.0.0"},"4.2.0":{"name":"stale-lru-cache","description":"Fork of lru-cache that adds support for stale-while-revalidate cache control","version":"4.2.0","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["mru","lru","cache","stale-while-revalidate","stale","revalidate","cache-control"],"scripts":{"test":"tap test --gc --coverage"},"main":"lib/lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"devDependencies":{"tap":"^2.3.1","weak":""},"license":"ISC","dependencies":{"parse-cache-control":"^1.0.1","pseudomap":"^1.0.1"},"gitHead":"7a62bf52bcc93be0cc5c10f46fc4cde780093a77","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@4.2.0","_shasum":"28abdabc2e81446d8dc938ba820d2d3aff0bdad6","_from":".","_npmVersion":"2.14.4","_nodeVersion":"0.12.7","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"28abdabc2e81446d8dc938ba820d2d3aff0bdad6","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-4.2.0.tgz","integrity":"sha512-pm+crHxq8sK1CbBSusQZ+5FVoTcXxPYfnrPNiY6POGf1Hai56GeipFKF2FIX8W0TP64URGLTiWa6GyQ50yNsCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDl4edhaWGK2y40To5O/gTU2MWs+aG+QMjYI0RRCFCIqwIgVTUQqATWzxTQuNZRKh8N7rntQez1d0FApskops6GGBU="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"deprecated":"critical performance issue fixed in v5.0.0"},"4.2.1":{"name":"stale-lru-cache","description":"Fork of lru-cache that adds support for stale-while-revalidate cache control","version":"4.2.1","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["mru","lru","cache","stale-while-revalidate","stale","revalidate","cache-control"],"scripts":{"test":"tap test --gc --coverage"},"main":"lib/lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"devDependencies":{"tap":"^2.3.1","weak":""},"license":"ISC","dependencies":{"parse-cache-control":"^1.0.1","pseudomap":"^1.0.1"},"gitHead":"18a81aee39ef63d6c7d51d789cf2fddef752b0d0","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@4.2.1","_shasum":"1384d3379babe397e25f42b2080893b99e3f3d4f","_from":".","_npmVersion":"2.14.4","_nodeVersion":"0.12.7","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"1384d3379babe397e25f42b2080893b99e3f3d4f","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-4.2.1.tgz","integrity":"sha512-c3EensBohl5Vv9L1LXgmPICcbRjam7UJnDSq+GD7k/UXT6mKku9COcAMGo/ohjwIWhQ1WzVJD/BVIkn3d9NR6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID2QMEK969rddJJR51seYWfftWB3n35aW8lT9CEcpJ2dAiEAq56MofRaAnLHZvKQwhaJTzey7kc6MaB/kVB9nAKs8eg="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"deprecated":"critical performance issue fixed in v5.0.0"},"5.0.0":{"name":"stale-lru-cache","description":"In-memory cache for node.js with support for max-age and stale-while-revalidate Cache-Control headers","version":"5.0.0","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["lru","cache","stale-while-revalidate","max-age","cache-control"],"scripts":{"test":"tap test --gc --coverage"},"main":"lib/stale-lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"license":"ISC","dependencies":{"yallist":"^2.0.0"},"devDependencies":{"tap":"^5.2.0","weak":"^1.0.1"},"engines":{"node":">=0.12.6"},"gitHead":"c156b2a5afa500e91c14fa01fc435e07b30e4e0d","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@5.0.0","_shasum":"30d52760572d771909d9ac10f267f6f1ae2c6f02","_from":".","_npmVersion":"2.14.4","_nodeVersion":"4.2.1","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"30d52760572d771909d9ac10f267f6f1ae2c6f02","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-5.0.0.tgz","integrity":"sha512-yI7BjOYtVfIM0o3Tm4JM4dRJpPf8tFR8znX77UXMTlKSVbdIq1X/MVw8FgP42sWIKV+5tarNlLXQDszmIG+mhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTsk/0UAmFOA51DJrbgyiPJINeiOak7RQQGVKSotBbYwIhAKSs4M5JHU0NNzXoCBvbfExn9yoWsWeMV40/IjrJZT6Y"}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}]},"5.0.1":{"name":"stale-lru-cache","description":"Resilient and performant in-memory cache for node.js","version":"5.0.1","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["lru","cache","stale-while-revalidate","max-age","cache-control"],"scripts":{"test":"tap test --gc --coverage"},"main":"lib/stale-lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"license":"ISC","dependencies":{"yallist":"^2.0.0"},"devDependencies":{"tap":"^5.2.0","weak":"^1.0.1"},"engines":{"node":">=0.12.6"},"gitHead":"517844bf8fe0658bd49256c344a2970dc5c55c40","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@5.0.1","_shasum":"abb8642a581bd012960283b3e0cb9b1a3371a42d","_from":".","_npmVersion":"2.14.4","_nodeVersion":"4.2.1","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"abb8642a581bd012960283b3e0cb9b1a3371a42d","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-5.0.1.tgz","integrity":"sha512-o5/VLjhi/8VagOBVLYTkzGIsLR/lkSF73uvp1pynoBeC7yJ2KJc2N2HVrJEjhCMFHAAcHl/vDcFzY+CZ2CXQXQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDi4k/xOnHMCMhS2B46GxHRzv3vSefyrTRyQ1jwJNKgzwIgLspzSkiKagnwP3vrMA7PX01MP9Gnu7MC+6aq6b7r4so="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/stale-lru-cache-5.0.1.tgz_1454930822627_0.45566083304584026"}},"5.0.2":{"name":"stale-lru-cache","description":"Resilient and performant in-memory cache for node.js","version":"5.0.2","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["lru","cache","stale-while-revalidate","max-age","cache-control"],"scripts":{"test":"tap test --gc --coverage"},"main":"lib/stale-lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"license":"ISC","dependencies":{"yallist":"^2.0.0"},"devDependencies":{"tap":"^5.2.0","weak":"^1.0.1"},"engines":{"node":">=0.12.6"},"gitHead":"d67046087585aa0cbe2b7e22714be3eee08e7f08","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@5.0.2","_shasum":"e701e0e49163cdfb1be6454a38d72f4d6f307e8e","_from":".","_npmVersion":"2.14.4","_nodeVersion":"4.2.1","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"e701e0e49163cdfb1be6454a38d72f4d6f307e8e","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-5.0.2.tgz","integrity":"sha512-z1Hu40o22i5zFdDo3JGnuJlosddk8Fz9nmU0gdUq0xZWBIZgs3k54DxXuXKrszbGGAbDB0Ng6+cAEPoScqbiXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHSahzRntSZBGn6Q56QdtEJpBPg9L6N/WY3Slu7oCfBAiEAnHRyrWs+V4bEz1ys/qZyxhzvB0YTUIc4uxRu4wFgT6M="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"_npmOperationalInternal":{"host":"packages-6-west.internal.npmjs.com","tmp":"tmp/stale-lru-cache-5.0.2.tgz_1455742866312_0.6594782834872603"}},"5.1.0":{"name":"stale-lru-cache","description":"Resilient and performant in-memory cache for node.js","version":"5.1.0","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["lru","cache","stale-while-revalidate","max-age","cache-control"],"scripts":{"test":"tap test --gc --coverage"},"main":"lib/stale-lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"license":"ISC","dependencies":{"yallist":"^2.0.0"},"devDependencies":{"tap":"^8.0.1","weak":"^1.0.1"},"engines":{"node":">=0.12.6"},"gitHead":"0311ff4ebe62f76bf66c7b893589a4e0580bbe2b","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@5.1.0","_shasum":"11dd97aaf41771dc48920e03c0c0d8b06adc6e0f","_from":".","_npmVersion":"2.15.1","_nodeVersion":"6.6.0","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"11dd97aaf41771dc48920e03c0c0d8b06adc6e0f","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-5.1.0.tgz","integrity":"sha512-14kREyxob9VWFmDdLYDftII4IzAu4aTpQ225hmRJ7cHCaRolG/rM2U31hhDiebxApfG2Hlcs3kcfto70/YEd6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGxzHNPf5pKokvULbCHvp08331HJL/wq9r6PMzI8UKQIAiEA9pehWBiDtozMQ/dLiF1BRSYlUDe0gdvgxKCxE3koAv4="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/stale-lru-cache-5.1.0.tgz_1480721454847_0.8246180084533989"}},"5.1.1":{"name":"stale-lru-cache","description":"Resilient and performant in-memory cache for node.js","version":"5.1.1","author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"keywords":["lru","cache","stale-while-revalidate","max-age","cache-control"],"scripts":{"test":"tap test --gc --coverage"},"main":"lib/stale-lru-cache.js","repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"license":"ISC","dependencies":{"yallist":"^2.0.0"},"devDependencies":{"tap":"^8.0.1","weak":"^1.0.1"},"engines":{"node":">=0.12.6"},"gitHead":"857f0962eee4d91403947d2b09521a64440a19a2","bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","_id":"stale-lru-cache@5.1.1","_shasum":"3282c3a7148c74e3c7858799130af9dd3407c845","_from":".","_npmVersion":"2.15.1","_nodeVersion":"6.6.0","_npmUser":{"name":"cyberthom","email":"thom@totheskies.net"},"dist":{"shasum":"3282c3a7148c74e3c7858799130af9dd3407c845","tarball":"https://registry.npmjs.org/stale-lru-cache/-/stale-lru-cache-5.1.1.tgz","integrity":"sha512-mMZv1BhlL+Ry7CwIxFvezqHOqnqRV3WpOqDhbtRj/0EN4Q7Y85ptYtvuc+f9TKh2vayZQjiB3h6nh6zH3Ce8Tg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA4wbXlzbYfG5VW8H8YWl0PgQEZYw9B5RncTb+n1kRcdAiEA8KAwPs9NVP3V9g1AhB+XIhBqZ2COwwqTrxMM4w4wF1A="}]},"maintainers":[{"name":"cyberthom","email":"thom@totheskies.net"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/stale-lru-cache-5.1.1.tgz_1481915416042_0.7159471898339689"}}},"homepage":"https://github.com/cyberthom/stale-lru-cache#readme","keywords":["lru","cache","stale-while-revalidate","max-age","cache-control"],"repository":{"type":"git","url":"git+https://github.com/cyberthom/stale-lru-cache.git"},"author":{"name":"Thomas Heymann","email":"thom@totheskies.net"},"bugs":{"url":"https://github.com/cyberthom/stale-lru-cache/issues"},"license":"ISC","readmeFilename":"README.md","users":{"arielfr":true,"maximusx":true}}