{"_id":"apicache-plus","_rev":"18-e727c5db052ac7c86f8926b82d43793c","name":"apicache-plus","dist-tags":{"latest":"2.3.1"},"versions":{"1.5.4":{"name":"apicache-plus","version":"1.5.4","scripts":{"lint":"eslint .","test":"nyc mocha $(find test -name '*.test.js') --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublish":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"An ultra-simplified API response caching middleware for Express/Node using plain-english durations.","main":"./src/apicache-plus.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"redlock":"^4.1.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"483e29569dccb8e65388b0ffa7edc83a1c0ef805","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@1.5.4","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-y05igTRAFS7AFCXHRSYbK/+elSE2TTkgrcBFgaAsgEkNsWzZ013LL6X/2Uw1KVRUAmeiKrEFQ09zLzyLHamfpg==","shasum":"7c31c1f31f1e8756e3e4b8217ff01aff70268d05","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-1.5.4.tgz","fileCount":18,"unpackedSize":131149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqdkoCRA9TVsSAnZWagAAG7AP/3GN5ZTI4Kl1PO32ihr9\n/IglNae60VGQj4zWVSbxvrQ3U+hnRGMgSIM7RpMJfqdquGJ9nYN0vPV5ToCq\ns65XFbx+xJW13KTpJwp07hnwkwhnOEeqYt8+t6H+Q+TrAXrLWlSe805QuRl6\nI5mDhK3RUiZOZGF2pX85JzPGG9xvgJc6LFLUuc/s8/GdT1aH1YbFAnylFw7b\ny/iG/bIxNR3JQcKz4fO/gqr32rrOxV4ndmoFQX20xPWCfBsHy/mPtBFnKctu\nQJ+YB9Kqj7wAMvsPXXX4rSW7qDObjnWbmkQH73e893J52CjLdfM8NNldaECH\n6+8BqA+G0ElY5tqVblRadss6jCykLu1yj30sRiaNnd2XhyEqZB7I+1k34yeP\nwybLGwco1yZ6qIZIz4gbj9tM2mqxKnzrVhl3PvDB6Tq+Ml2JS+a0JXEigcMW\ncT3AFAz6puprtVx2JXc4hzDPdPZggZy3/WPLjLnTDChj6PYqE6ODZpO7JHNS\ngDtJzcipSeJuWpeKt40qyxVU7mSsIae5AsxJ71v1lnIxYFrD3mabMDI5qakT\n2nuPf6mqY+9GpVKoeEvgSicH/kNRnMuU9C7U1N7Gf7qTAJFpH8/6lJAtP8+c\n9VWqCKetHF1jiu5Yol+418CU4p609v8aiYI6C04EGlER/w21eGfMf3GSBdZH\nuRD6\r\n=ZvV7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxsrGIFa3AStUDco4THJQhqrfxH+vCG/EcCDD7ZYzsFAiEAlhJZsMOuFg42yhC8u2vBbLcz0KV+fXj4OIiR1Ui1I3g="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_1.5.4_1588189479854_0.9537346786701968"},"_hasShrinkwrap":false},"1.5.5":{"name":"apicache-plus","version":"1.5.5","scripts":{"lint":"eslint .","test":"nyc mocha $(find test -name '*.test.js') --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublish":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"An ultra-simplified API response caching middleware for Express/Node using plain-english durations.","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"redlock":"^4.1.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"1e115eb48bd72621ca6e3d7d593c1b81c86e085f","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@1.5.5","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-3So2Z6qm3hCeIDQdZa8qoiWY0Ytqd516zUQCihfjZWAV4uHfW7DvbLgydPtPpILiHBT4onm4JP+dxQCke5yz2Q==","shasum":"fc92d20eb8b8e0d96dc922b84370ab2c4e9eaa76","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-1.5.5.tgz","fileCount":18,"unpackedSize":131144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetHdkCRA9TVsSAnZWagAAPXMP+wbevzdvEq4rt52kmnWy\nIdYNxfGJSCZ4eMGRlISWk83kfgkrlSHG91hyYkkfxMMW++wLRw6rAa/hEQG5\nw5jb1rENT3me62EAaRcyr5HxOw3BfQtlXtMBaDsx56zE8gtD2IBXzFqI/66d\nNTfHwuupk9acCziQ4VRqf8uFNw2g9zA+JLS+53cyctaMFhHFKaoEIFSekuTt\nPijmotHBXWXpennV4G9MmH46q35HOorMaIFPUFDQiMFoTlyzh4XeqKTT3AQF\nUN7qTgZ62WpZX4nyNyqVHssRaesNeIhD3nu+GK0wq6euenlXv372OWdoSusV\nebrOdhaf2agA/tXNq8QHCzulDGhkvCGov3vZVab2S06ckKUPCTjga3vzSmDx\nd7wOdyWGdj+56gHPEeohRyzncFRl0ztmaIX35Xy15D8ljMHz/hS3+47K/FGy\nn960aYGkUlVarGFkKd7QkZ8ondosMDwN2a9Yi4w/kVtEZtFlxDuO5LudlbYC\na/NkCzx7NNa+YRTt29rIyMQUgARzOJaV28EuDgGlvYfVmTEr7M5icDKjuF4S\ngq7Gs4p5v7v1dH5HnkPq4XW6pYs2Q+Kv2tzrOOZUEzBifKgfGwNBspRE2qK8\nUrPAvzkOh8aRDQacKf4JcGoc/82wZA2e4R4Y0HEI+wJJ7IwwB6LQ3+P/r56f\nGSwp\r\n=ZJpe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGwm1HFVbJSoThplalaWmK6QlNZg2Lx+P6UiWWVviuzwIhAIjjGa7xt/h9Rsl38kyYZQ1pDfyVQUoo4yp4rmMYecGw"}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_1.5.5_1588885344905_0.7160136745921684"},"_hasShrinkwrap":false},"1.6.0":{"name":"apicache-plus","version":"1.6.0","scripts":{"lint":"eslint .","test":"nyc mocha $(find test -name '*.test.js') --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"An ultra-simplified API response caching middleware for Express/Node using plain-english durations.","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","redlock":"^4.1.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"c268a038b72fd861a3d0f49d1659fae13ad74e82","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@1.6.0","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-0p3q1Drg8QjuLjwMEmfU0fCfmSdOhLXRKOenSyAzK0uI2ls6v82RI/2wKR8VbanX4oikbh4aoD7XXRXRYXwxrw==","shasum":"5764b1fe1e845b01a1d610758c87ee879bfb9d4d","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-1.6.0.tgz","fileCount":21,"unpackedSize":152656,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetXo/CRA9TVsSAnZWagAA0ngP/1Jl044kH28VyGViBIe0\nPgpuV9QXjSbJIf1hI+4olesB+anDabAqB3ZG78ixw+jjqhO7FcKHRMuoMuAi\nWWcUQXziXh0N/1itR27fCXbwXjdcbtd1rmbpLfGiCg4Na5wNRysCM/NgtZ8P\nO2BYMVdzOrGC2WZWOGqhyLzLjqDsehYee6gfx3LzxeQD6NET7Rt9tGQG3tpy\nl1vl9whBjW7edAIpzQtp0NVKLKf6JqnpxNyZVqWn5rr4GKPqqIAHdQ7GcJGU\nH+lEf2QSXzPf/Aprdekdth0Y6QLvbwqIboEiCa/ssYiFvEKG0uB/w1wNw7Uh\npgm7dKQ/DE0Iuq3NjD2I+2NKT6bqZd/wov3BIaqRjnQ+dMjkScuO402Vtc4s\n6rw9I8DCg4RAS+7/DF2tiNcc6TzyZzEEaKZAwpY6j6+GPJ07lLJaHsPyhB+r\nYUXEk4/YLfERXf9W1g4J7Pc0MKBg61Wwr+LFQ9xjvegpiRJb9MCyYNG/VZVT\nyIp9dJXoZ0MqGWgRgEkEnB6FQb8z42Fcihji+gXey9jvtQIo0YRyXEBAB3qp\nxojW5yUrtbz5YU0ivLPeGndqRUxC5uLvoVD0YTZjm+qxX5Z1CyPM9LegewZs\naM09n1ZFmTZFQsGNv0iwn/9CXvQPBhT6jRxIHEkQ8gAu1yCOnKYzhPPo3pQV\n6pNp\r\n=5IUa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDr/cfXJDt55tpm96RqP1WgedkxE87uMKrn9MPa5tIB5AIhAOi2e/fzXEoh63KkU8wnwwKagQ6SU0VTR0EJt5y21rQQ"}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_1.6.0_1588951615123_0.8209046303985452"},"_hasShrinkwrap":false},"1.7.0":{"name":"apicache-plus","version":"1.7.0","scripts":{"lint":"eslint .","test":"nyc mocha $(find test -name '*.test.js') --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"An ultra-simplified API response caching middleware for Express/Node using plain-english durations.","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"adea2577accbe841d42339c66b3d07ae9f90f89a","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@1.7.0","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-FOzJlqCHePYANGhpqRQSsS8KyVakBxpMIYowr4g6fQrmX42VZDPrVGRMc11slRAqGxCYXzoj20vbuXlxUQemMA==","shasum":"ea320704a1b5801d2da62b31602b1c8753072fce","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-1.7.0.tgz","fileCount":21,"unpackedSize":160694,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevVljCRA9TVsSAnZWagAAoVMQAJ3Exw4SmRLlxcLgnbTQ\nrBQLOHyitdVoFbFxPsH6zO/ISFguQLVe26vwXMLz3QeEmAibA1Apnb1/CXGi\ndC+wVEUxxTw2L6r52Z39s3zWF5/YqZlWXTK9vQIXOrPSMXsxonMcOco9D7V+\n7z11+/bmRfjcAUghe8QiBpTA6KEJbPwnFeqvGiCWgk/FWkKUyAMkL8AOUIKo\nTQP++7o6OXwsERruOxYxv1f2nW+F4nDHCMCL2TN8MZ+C0R7rvhtu6IghQ4aR\nMnLLzn+DJlFRmQ7nuQ/MbmLX4x0x6QdNzqSkEdl3HVIIWc5ZXFJjexWHhi55\nMGgeb4VKtkM2E01/F6B0RRB3DcuSI48GY92onA4XtC8JVKjQosC/T/4n9czp\nqmy5TIh+ZvDHoIgD92E4n5oR/NKmtTN3cSWoR1RUZOehed2OdwQC/dFCFKFA\n1hOZO9dZ2jFlby3lpvAH/uvQB9PXdY7xmYn8ZI7iiXGb/Ula9qph46jGen/S\nwsxEgYaXMrdJAcx1jG5bpJI3ZVpJaC6zuXb8pJYsObIXtfHR542EP8ySeQVi\nArSCqZOn+niZx6NSpaiYchFMDPw2AmFfygG8PdAgt9EzE/vZ7jDw5fGN6tGd\nnMSiwrgTdmcKBBAiSo3LEiuNAXHt/la1nsi4WgPGgJpnXMrmZUBo1IJxJylU\n6qdy\r\n=UMWZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBq6vP25HKmhU13bb4gzMAB02enYDi1WAFNJD7nVS4ijAiEAkvbmqrIT/I/db602ffyE25Nio7d2POz/y91/JrYiQpw="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_1.7.0_1589467490723_0.9761520850695182"},"_hasShrinkwrap":false},"1.8.0":{"name":"apicache-plus","version":"1.8.0","scripts":{"lint":"eslint .","test":"nyc mocha $(find test -name '*.test.js') --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"An ultra-simplified API response caching middleware for Express/Node using plain-english durations.","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"190cac6926d17fd2990671bf65d583fc18e9ef60","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@1.8.0","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-coZ+iNO0tXwaIVCanuZ61iul3jARa1vhqzDKucDpwGB1mKUly1ZWkXuyTFcbpiixWNM0oer/047l/zWuywBt5Q==","shasum":"0c7526d615b79bfed55e45b3a299cdab08bf7a16","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-1.8.0.tgz","fileCount":21,"unpackedSize":168514,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevuUiCRA9TVsSAnZWagAAhiAP/19DvK/ahqd5DkCkN4Qw\nWAsKfCKCu6t+N9gmJYxnezrcLUjLpOHT8uooA6ri6FRWuZnbmp/DOT8Cf8N8\nOw7EGFVDBjwltO7fHEUGwQckwm5sv/brNZepVXR/neqowNgyRlYu3QqvuLkS\nLmSK0FeBaPImKRrtqvG06g+jJMrIEhHxcH2RdxjXXIEY45ah7t4/naWVN2wy\npH7Ii3AU9G6ZSeqecD0dQNDazLxgvgb+2ZrMbu8Doo1gZOd29DKK2RPt5dpW\nJ5HK+LqGprkj9UQtWx8Rh1/nFjUxWYxTWhO87civakzfDkSW7Cb5sqUTo1xL\nh6MTsNsX9ReCcVCLCHb+mCusUxk1wqJW30lb513Xp7FMO5/4crI3GyvpY4eZ\nXl62j2FYNHC3L1LCW96Qgd/49qzbrght6jsf5FQ2dkIXePJiw/EW4+L4MoCX\nDxBf2hMz9BcS6MqX4Rf+UTg+ISk11fxwDfgSUfSPHF+I+OjLA+quD+lWM39/\nKby9/2P/GnXbDWmvj08gC6AqLaSJSHuI0iM9G3d3M+yBa2EzhDZZKkd5B7QT\nLS+mt6R4G0gZjurxLokorg0m/moUxjKC+NKwGplh7WvS3qrHKmTnS8CWHap2\n2bIJMcyZhUvgswoJi4ORDYdtxgNhWopRhYeObe+yc3qSMcweqCxGYG+89Es/\npzJC\r\n=4B+N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCU88Kfi0/SmzkP81/8997UbqeVCU7B36mjx3uLwn85XAIhAMHRYwKGL3T/hPxOM4y+PiIAVenPBl+r4o1IKrlk4GK0"}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_1.8.0_1589568802337_0.5357763682053442"},"_hasShrinkwrap":false},"2.0.0":{"name":"apicache-plus","version":"2.0.0","scripts":{"lint":"eslint .","test":"nyc mocha test --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"An ultra-simplified API response caching middleware for Express/Node using plain-english durations.","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"b6755dad86f03db18ec0f1a2e14318258c674501","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.0.0","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-azcY/nz+3finW9s6JiFZBVLDsJUpE1ZnqZgADpqx4I2Ntx8CCs2JzDrS292/B1HmTUQZicv+xpGHdsSQ5Ih8qA==","shasum":"27e41035eff662812943b13d30b8c4a5476c27cd","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.0.0.tgz","fileCount":24,"unpackedSize":235084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezulYCRA9TVsSAnZWagAAuxIQAIi3kSge6XyupciIHe/1\n85GcTGlztF8Ywp89u8LEj+0YuDq41ryDVlsLYKmxWfpHbXsKm1su6o65tQf+\n0uxIApDhH2UDmPzH3ap+TFPYYv15GYz/aMsUhsnvq1j4UwPqkwBCyIRBhE7F\nfjKHsnv6EkgXzFTa9TaqLfSLThwF9E+eXcSX261cTy9CIPMVb4mv2jP/yqUu\nnfpwhYBz//ZERtJ/xGc1N/xdTWlSWYP064IvpasT7C9FvdX4n3dhScqh8xGe\nBuoIufYZClb/pOv+gp8f2f5/CQUBIHPcYl6zjHsPDp7wM7BDf9JveM5VGvOt\nH31JVjA5ZIen0GWs0SGrIovTv0UO1H2aHNoR2tOKJ23hTujYLSsk4MAj+5Gy\nh4JtOHezaV66ckr4Y3RHEnvWdjEJjaODwosBPaDzc/pV9CUUAJ0kFOwDYkck\nLFb6L9qhQx2OSsZ8YIcPfl0uJcttigBYuuJs9PKlBCwTObLzyDtpwbiWzITG\n8MspePQlAmoGuQ6R5JbKEAJyc9PEN/TuSJUA6+ZfeNun03AqgkPeNOv5w9Di\nsNC4vkFWXYDZIPVW4ZVmOoNxPKpddTJUhjfi2y2opaqeqpgkTQJ23jBi9hUp\nKbe2lcfZh2qbLtv8dzkV92vtovHbCmY40aFu1tN2CI2JjzUX5kouifp97xqO\niyQE\r\n=jKj5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtj3VFPhLHbQCkwXojkc3qz/j7lM5I8mlBJESBpDhBdgIgVqV3YLUPx83Gb9n3q7UiMDwbU6yyos6nYrV2tRbLY6U="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.0.0_1590618455535_0.9230703290082789"},"_hasShrinkwrap":false},"2.0.1":{"name":"apicache-plus","version":"2.0.1","scripts":{"lint":"eslint .","test":"nyc mocha test --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"a1763dcd3e6e9dc0731589e1be1e5a541c448621","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.0.1","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-l5tPci7tXL8YjeaUFcBeGAM6QQog/BIfWKdopGWs6TMdaB9ukne9TdtkWInmylBQArxyt8dav077Jo6UTZJqHA==","shasum":"d6aff6f62f1ed57b3b454902d9cba168138e9668","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.0.1.tgz","fileCount":24,"unpackedSize":239784,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0BfkCRA9TVsSAnZWagAA7vIP/2qHrESTgy9Xst1wto2S\nRDGvgrcG3HemhBKoSijZG+4j5XtafogvgRrIJPi1PXuFaNufpq7FX4qpRhTy\nwdUb4XSBwtm+vQ/LUJ1GKaVdynMbO7/G/AePYn2KcVLV02TYD0v7EMiDxw6S\nJcHXYFzWEyr5RDdcHooAHqranDEcko29JN6AjjUp+D6aH16U5RzP9HpBaNa+\n5v45KvisfvGnXWjObcszv3qTw1VJaJq30Uhmixjk36BjVgkhqUIdJqYnVZ34\ngTYwQdAwfNkAXhsMCmEyZdPadFGCV6oq6ASeQSh9hJE/Riwykj87xY1/5IZ4\nnOVDBG8NBmQKPM4/n8FQzVXbMuazzAcr/4o5GuhjpM94P7FtDsLsVIIfP6Vf\nYicCBJOQC75pnUb8Yl9o9Ys5o3nrBRh3YJ8EAOS0ArLQOzd8CtkoCYxjQRLr\nwmv/4g6ENUaRT+fdKoI34iB4CGtA2xGarMJz7pa+WopTHZVFW5nDSq83Fna9\ngSsUw7M/tX4+bBjzl5SvpMyo2/APRGiqWIJ6OHksKMnOj8FlHPFrcjbZSKEb\nSSOnnL9fJNzGV1TbzNwUitqk2vi7QJBTooUbj261Rx9ZAqQ9v+52zQXYZF22\nQObNVGW0M2hTu4saXapl0k9NARB/BQ3CYq7MOClASg1KbbLVa7XmiBNzb5r4\nX/ia\r\n=CrNx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAqxVy8vH2QWKZPSmjku8FQbL3OndQt0tOCTKtl9nafoAiA+MbY7rY5mYnjBGUKJWld2VXfcZEsvQUm9u/gvMTl1wA=="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.0.1_1590695907301_0.40216594421913254"},"_hasShrinkwrap":false},"2.0.2":{"name":"apicache-plus","version":"2.0.2","scripts":{"lint":"eslint .","test":"nyc mocha test --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"df7138558ba810e9c34db8562cb49f4e5ad7b313","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.0.2","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-+hkO1MplhFykcjP76kRpFTASHI8ONMbCxEKtjypZGY42rTMi1Gadbmsc4XIrYL2OvGIXeBoGgFDlbpG2jGxtkw==","shasum":"1ede31796defeeaac98d560ff9273a6508c8fca9","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.0.2.tgz","fileCount":24,"unpackedSize":246009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1p5aCRA9TVsSAnZWagAA6cYP/1mJH9Acwub1QiiORcuV\nUuXuO4+MrP/+bzPQhZr+GUkj/taXqDu/YDexzMGQYuDi3AkHwZI0vjRKe2TD\njtziBQcp5vr+tAcMhbaD2csZ0JyU88mmcFK56yZ5/oiR0jukqVcAm9xDYNm+\nWf/oCxfYfnVI8kiFOyIMdbGmT38N6J/Q89yPbNaWqeU17VoBEwGq65M2kUJb\nHuXGVamUPnHII1NYdwvZpqRV+9y72tORIsRUVQcLURmPpQh2aPK//f2YECkw\nHuVvUxNxUhJRQvbMzpALPUDR64JgsCMQ5GfG81GGFUIPMW6+bYVjpzX/nfGn\nhgLeTXCTbBtiZODNGovEl+klJTDl+yvE1eahPh+2Ril6iQ18KVE+D6V14Gah\nFYLaGj0pQNMdJRkg8nH7oi1xY7AiQYmirph3jjvalRrWbocPc6sCWVml0Kz5\nto/ebVVzI+TPq/BSpx4otG+86q2bltssUafJ9F97jvGxpqDr4QOiWqSM0tRa\nMhNFWsKxxFFE/O6wu08XS4MVXNTkmo54MpHhnG0VerDysClEzfR4znATdGmD\nIiH3rwA+ZTLfT/BkH48T+AEtJyvnPfxwZ15ghckVUuqOoGm5dyNDFwI6eppt\nbeRnP1sp/5VbLuz9dbxy0KpKYB/wDgLEOUSaDhCV3UzyMpXgSAd2qI1UrkAk\nu2Gy\r\n=eqa9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0fWfOXOUcEJTRojp3LKL1KCRSZ8gvbF2XoaHWkDQ/6AIgZtr6a0UdU1iGulWqd1mxQG3trE2OWAfXinv4PK5MkB8="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.0.2_1591123545975_0.5149786170393864"},"_hasShrinkwrap":false},"2.1.0":{"name":"apicache-plus","version":"2.1.0","scripts":{"lint":"eslint .","test":"nyc mocha test --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"bd4069d8dd417fc4d2a1925a63b6ff78485e1566","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.1.0","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-cJ36tYVWv/gV1wJYoH36h6Gat4/Cmn70lWx9shzZByZ95q8cPsNSeBCf663yK5GIOjegGTCDODm+iQcMiA7jDg==","shasum":"df43599c92f351924cc484bb153fd0b690f83710","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.1.0.tgz","fileCount":24,"unpackedSize":248046,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1+7iCRA9TVsSAnZWagAAG+YP/3Fj6malLUZIEruDvaxE\niPdU1j0N4PMmnm6DDF4uQsKASKwM7kjEEjNFB4uy96g7ioNMXXzfny5on4ie\nmdsPQaBq1eTHwsOB4cZE67Eb1qRqkO78PiZJURzFK2+tPtSMZvoKb5qxH4iM\nuKGn7RLBU54/ZfWDq4vEnDiTVPI4e0pIBQVHYq4obOsJdsOip0eZpEwVI9Ix\nv/vH8o1i6LKm8In8mwUvXPaX3zwnvbyokAFOpxtJYuOwfL+54sGhkGtLemtd\n6zE4EInQcRI+T29h0nmnmGCUbF0ZEd0WFPBmErZAnDxNBYgX3hVT9iMZEXn8\nKDNgTjeLLlhexs1Jb24jJgO1mEekExuW4Zq/dJGcgZh4QzUw9jn855CbmO4k\ncSeLzSJgdYhlW+9LH1KOzsxhrCKgOMlvQ9uDbd8PTIqQK70mu7Nw2MAFVDRb\nsGSXhBVyARjVdQGjYzkWtvu1ezjwNjMjDGqGddMqdydzTEH3KQdhcSTsraYm\nrfz4mdRsS608TAIi6Ta2X1lDZ7vcD2GIgSWOD5a8X+R2dwgFCZlPb/J2X58W\n7eI4j7ytLf2+xLt6u0Ok038xzZnbU4Vqgw05Jai15WHuUTtlWgMQyn+Plyt1\nu+7c5GPFAWESo4a5li8jchuYvyqstaevj+7XeDD8k9p8uXu2I0rnTYqLt432\nvQQo\r\n=b8wS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEOksloqLwUZHABUwXl0uyWHY9fToAprV/1/VtXMneVKAiBLTIxR+61C99Xc6MI9FsuG71Vokig/kB/lbxbCuhzpzQ=="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.1.0_1591209697929_0.6900292860407369"},"_hasShrinkwrap":false},"2.1.1":{"name":"apicache-plus","version":"2.1.1","scripts":{"lint":"eslint .","test":"nyc mocha test --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"97df29f5e987f56e33f5f9b0055b8ccac388005e","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.1.1","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-lyIWOkXsovVZVlQAx7xQrFF9DJtZywqXPGPt3FNUFCWtKgvj/Rht74kKPlUZfe94Yc3C+9kTGjI/GeRKeXzrUg==","shasum":"c2c8e098cb37a14e83d1a842074999c25abb87db","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.1.1.tgz","fileCount":24,"unpackedSize":248100,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2BXNCRA9TVsSAnZWagAAF2sQAIIB+8q9jpS+jQgrkppd\nKciEPcyGFxIz3ufj+nYBIR7zkuHKSFfT2ub8kfCC1mj12qkuhYhCn3LyXi7r\nElxTzoStAdBZckgYqwQ6sBGBSXS5OUbHf4jjuikVnoqViQ2YydTdPnMaBFKJ\nXTcxyBBFINR6d1GQtSAD4Sb6Mb29e2K4aP0A5a6rt0s/FPzTVx+oC/Qy3Iqy\nAWNh+pBRW7nqi/Ea0rKnlk/d9EWFdZxKe+IU4UyLEezu2hBIqqid8xi3CP80\n9lW8lDPGHctvcP4t8jKcFw47suvZPG9ROZjejggRPdWeCY70T7USjTHwvxMy\nL6/QtiQd/f3shANu/m/K7DHRQmP9r+eHHKWzlFy60K6XDdKculhn0d+mrdp8\nVdeuOBS7ykX+8+C9R1E8/RdRp/TDDGp4aT9fOOat4tHwtcC9vRXscXnSPJbg\nqgH18PczR0CxCKRpabuSFKPx6uzq1vBJMlmiOpW4wmA563tBVJNPH6YhPcVV\nlz/0WTdtrJPD5/a8ccCkM8Myct/TS1sCYyzqxXHaydqmEaV5XxY/b09Dc5HQ\nIAG/qWh6nRe5w9WIqdaMDd2mSMnp/dCiNKuEIXZI06kzXH3iCG8RBS+wVxpQ\nvy8mjkqW3kL/DY7GYKKTrHU9shJibAiYCtjNSl+DlfJNpkStByonqahEMWZe\nWB4+\r\n=x5CS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzhRM20KdFlaxTDMQUJP3tPLuPA3Y3g5vtpClmmmMsHAiACD7D+eGQjcZHy9FQjF16BsrunR/KAiV2LM50j8LerFQ=="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.1.1_1591219660985_0.16184661268414136"},"_hasShrinkwrap":false},"2.1.2":{"name":"apicache-plus","version":"2.1.2","scripts":{"lint":"eslint .","test":"nyc mocha test --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","compressible":"^2.0.18","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"a0105a5ca0d41c789f1dca317399ed81c1e2e0c0","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.1.2","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-sbeZa9xQet735ymVswAhFrLqrgV5Wf5W1pOhifKpnIG89DPHkLSIEdIL46e2pIQ9zvwRSBwmebb2YLh+UG25IA==","shasum":"c631fa95a612a92e676b27ddc1a9c34d35380585","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.1.2.tgz","fileCount":24,"unpackedSize":248236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5VMWCRA9TVsSAnZWagAAPDwP/jirfHC4ksfN+qVv+8f+\ntzRoZ2DTKgzIq3JS6sZgbPlRWVDenpdv+k0W4jxwCa7JPFzGrvWDMa/ML9Vh\nH0S12gMo0yIifFU7twYfa9NBSmDBKizc73YlO3OXQeC9UzhRELUmfEXc6yyS\nY+O3Wiw1wBjjoRbqZ2K2IjnQmz/R7IvmYlKKShuYhYlZxCnyeYCJaMuNiTDY\n2pNdjUMzQgG9g+mtfpaGZihn84sfPlrBl56WYX+ZLINO5u77H0qkO4QtwdzU\nR1Yb5icMv8s5BOQJVFBIUul8GLTbENSkPu++ds58CjVEZEYFqmrfqMlF0ONy\npPR3psnx9S0i+KqGvNY4WZb5lkNEciwJY0xAhRd6LpJGs2RfVv0/TCLXkmvp\nWYQ5J79If8Z4tXtSNyZYXkcFmtzWrekWW3QUSoVKAcWHHLivBk5ZH5TsF3m3\nkUWQYCOth3LkZCyDoyFaWqmUHMiLvKSKOAy5LFQ/YDNNzp8xBYzaWRgmvpta\nIkXuB97xhmVi/UPTVjUAP74MdYmd/oZwQDWzeLiX/loIh548JXbAm1K+IONJ\nejxfB0i0dfJcETTARk6uhRHNZKEx0etTkaNHtKofnG6Ow8hluSGyIPdEiloF\nS01njUWdNP7/QWWVNYftCPnlvFVkq7qNAn3V+ZrmS7CY2swVZW6mTOHDohFY\nffpn\r\n=+EuI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDJQUnFdgfPKOcrlxY5MoafSnFzR9CnmIDeOzVm5Ae7AIgb3rhXcGRxvc03dX9UB/CV5oypGSIYbRoXb5cUR3afcM="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.1.2_1592087318224_0.6596910341232503"},"_hasShrinkwrap":false},"2.1.3":{"name":"apicache-plus","version":"2.1.3","scripts":{"lint":"eslint .","test":"nyc mocha test --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","compressible":"^2.0.18","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged && npm run test"}},"gitHead":"416578f8a35d82093cca1bfffc3576953f67f36e","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.1.3","_nodeVersion":"11.14.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-2Frg/+7GmXlCasW0ejvZGTuFLQ31di9XtVZJZ8EcU0d+QMcKv2/WSZCZgqkDLyUKhuOqwAILKExQZpbynjPDWg==","shasum":"950010d28608ea74abe802282ea52e18fe74c387","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.1.3.tgz","fileCount":24,"unpackedSize":248329,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6nWXCRA9TVsSAnZWagAAUycQAIMz6o5qcuz/3XBIowhV\nmql7v5bzgKykZdTwCGdO0EJilzC/6chRX+5lWFpT40jdU+pCFm3Gen6c6KAV\npJxPBUidydHTV07XeKXaZhuQhfdAvcjkCrHb1a+auEN629M1u9os8OpIe1TL\n4oP50pc96AoshJarU/LJgy+grT225pqGQfMNhlG1kfFKGif3mIyxTfbFAR4f\nvE0J9Q08xyyxBXdTIDTpVuR4RqyVkfzH5+I18Ff+GgYdt+jVKvvPX/h7Sqvh\nE/XnfFO22MH4XSC8DTvkuqf+QuVN+2s2rTrFgRDZ19Z+yftp7RTTESSih0jK\nEwqNmF3PpiZMcIxRBHnM/3FdqC6g/JccE1VHFLHRgiWTKT7oG43ISdKmTttp\nCqdsWRXqV/PU9Otun49wOWyae7qLk+uOc990tTRaPtMD5Ud7S1rwUj9KOP1e\naHRMVMqySQVAkUmaDEMKBnE+b2vZ5XHi0Na4GbZ7F+u7q30O17GpQQgFJgms\nsn4xzo5WOk31C7ixrakf2s3DoT05GzqFJ7aia+ur6QOJj9ArwbMmz2BFp9AE\n/X+1McAwOTohMYzJoJJgF5yev+aKGnbsvzTACrjrHfrG98v42W5UzlBuCWQE\nfpUsGbaxgTdwjKP/XIMi0u9MVwRoRKKUj+49x6bGJtZyOlL1/xPRIfRBpH3+\nwp03\r\n=JQum\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDfMqXYasKVlJjTsHVCwRSfik67ZCI5Um5tCuC8dEbIQIhAOA/7C9a2fKeO//TCgGfKPVuQaDZhHqIgiWaabMls4AZ"}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.1.3_1592423831031_0.9505414602081343"},"_hasShrinkwrap":false},"2.2.0":{"name":"apicache-plus","version":"2.2.0","scripts":{"lint":"eslint .","test":"nyc mocha test --ignore 'test/api/**' 'test/setup.js' --require 'test/setup.js' --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"@babel/core":"^7.10.2","@babel/preset-env":"^7.10.2","@babel/register":"^7.10.1","@koa/router":"^9.0.1","chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","koa":"^2.12.0","koa-compress":"^4.0.1","koa-conditional-get":"^2.0.0","koa-etag":"^3.0.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","compressible":"^2.0.18","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged"}},"gitHead":"bffc15f4096e819e11b29a327208c2e71d4c16d2","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.2.0","_shasum":"c6ca1b4e27258ceb2c3f2550e1651938e42c4a5d","_from":".","_npmVersion":"3.8.9","_nodeVersion":"6.2.0","_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"dist":{"shasum":"c6ca1b4e27258ceb2c3f2550e1651938e42c4a5d","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.2.0.tgz","integrity":"sha512-wTLwhi8orzq39YpRtDvS8g7mVHxs8LEsVwi+fCgVrFN08c84SV3wztyezaucUAND3sB//ORNkNLDvuMmAJP0PQ==","fileCount":34,"unpackedSize":563029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7MsNCRA9TVsSAnZWagAAbmYP/0cqTVmyJHS+awcMRg3k\nqH7yWte7iMShw+SKZ6wWrHtG4D+OkUeLy1GQ1xJy8m4bQx3cySenBzeWfYeU\nDqxE2FcwNnyZcesrBVNZ+CcWXCWcDyS5tpT3O2hHJqgIKUKQ8zjNU5PVSlxY\nHggmpKFX7j9QbGRbtAt6GCZGJVg+Zd1XCeR3Dn1R0+TFABTIjQuhmKAzRKsl\nyU8RRjXh9ibpBfcD9OanJMxFKmEiAhYzkqdWgtkk9bXbuaebMjrNhoSTA/PT\nwgwQBNro5zWzVjd1hzbSx5zSzCUJu6Nr81sqFnpPEL15FTCKa8WGry5Pn36O\nutE50uquwQzpkW0cLcr0areuOVHBq7LR2fPj+441/MSzB806vYUf0zgTLpv5\n+aFp6MyUtslWih4Sf1159HApo3126mDTtpTrQLcd+eX0uNTkyZATq6XcSmZf\nG799niugarK51NmHZnttelVvo7OFtW408Oj0iSoCrsVYUnJbYk0hzrZLRPCZ\nfGOvtWtFaNrqVITwS2UnTy2wuxPf10ZnLy79bOGLNSe8Sp82TCeGqTYM5qle\n6vAsRrhW9PD0YdjEA4QO/oBURmwWS6Yf6mJUrWqJFlAsTjsjL1zE9uNgi7e3\nxUYjOGZVNgv3Egflqsev5Y0ZIDsY7Nu6yUkfpWx9UP1nN8cqYnZ4pu5aXuXr\nSluS\r\n=uoLN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF8EYELBMELJU1hXTn+Jgt0ck43L8bGh+Eufxjp8PZ9QAiBUfGqNLx/XeUOhwVeszaWdQFpG4uK6kT/FhMVVZg6+Yw=="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.2.0_1592576781100_0.23203235531571198"},"_hasShrinkwrap":false},"2.2.1":{"name":"apicache-plus","version":"2.2.1","scripts":{"lint":"eslint .","test":"nyc mocha test --ignore 'test/api/**' 'test/setup.js' --require 'test/setup.js' --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"@babel/core":"^7.10.2","@babel/preset-env":"^7.10.2","@babel/register":"^7.10.1","@koa/router":"^9.0.1","chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","koa":"^2.12.0","koa-compress":"^4.0.1","koa-conditional-get":"^2.0.0","koa-etag":"^3.0.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","compressible":"^2.0.18","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged"}},"gitHead":"9b261f2345b6b3bab3703f7e8c70a184e6b8557f","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.2.1","_nodeVersion":"11.14.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-1R48smNMfkt6kFqPQw/GxXRnKx1kgNZqyzjfC5GH65SoSs+xbLfxGQ8+kPs5RlUgWp45gCXujqrFTzILrUWZ4g==","shasum":"a2be9c7b1cafd48f76d78961d7fe7adef9fdf86d","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.2.1.tgz","fileCount":32,"unpackedSize":272104,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7P6RCRA9TVsSAnZWagAAUuUP/2Up6H+RDwSKLTb1mdhz\n123SLMpxPumAv11ZFAYyHAabyHX8SWbP66Qxbp8Aq0Ztd8C7UYfIGpxMglXh\nfta2BIGdhFbghxxVmrR/8439yr/HiMGb7U0S7AWEuPp+rmrJ9b97KOqQlT5X\nsjDKKx/Nz/lYRXpVkt0/8gUK0+fLAwcTxl2trkm0/H4k/Rc3yIkPOLmB95c4\nW9ARHFvsy1ZbPDK59xiGq+ebFXSazL+oZ8eeXtLRZk7l0htSUKGqYQto/T7m\nWxld97n+3PGCXabs5VugIOzBsz914m7MH7c03dnufhbwXSBW4BM0iFEcxuc2\nALVOLAc2x4XBLdoMaWwC+UAHRJCN35owGYq3KmfPICuSDz1E+isILk5z3LrU\nU77wnPSNJZFHGRF/lmNDmrvIvBFq20p08FgSgPp21CwXmE2P7TCv9vYHMD1p\nhcrSueMh/wKIxNATJYr7Id0eD/vhazWsIEeq0fDZwfKWNpe72YCCpyOsQd6P\nhWgL0fLID7r7OGDyJuhT45i+XGpUjI1+wf5txJBprsIgMU58rP+FVjSIG3Jx\nEhgYq/7/pK5GyYjtemjQzA8UJCMPLnF+iuGw3W//H+fcPKNNqrZLZnhMpcUo\nmZ/NZa6EI5g0rZYq37xkqbXc+uX6IXRBuBNxJ3OAPjuqnP50gIFQAJU5Qyi0\nJ0sc\r\n=AqLQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkrxIh25rJJbP34crncLrnf0J4E7s5LqJr4SBmZkXxjAIgCnXkrFlfrY+DBThVs7xNDoACnxsITGoCc8bfMMSe6kM="}]},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.2.1_1592589969287_0.006706882249841062"},"_hasShrinkwrap":false},"2.2.2":{"name":"apicache-plus","version":"2.2.2","scripts":{"lint":"eslint .","test":"nyc mocha test --ignore 'test/api/**' 'test/setup.js' --require 'test/setup.js' --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"@babel/core":"^7.10.2","@babel/preset-env":"^7.10.2","@babel/register":"^7.10.1","@koa/router":"^9.0.1","chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","koa":"^2.12.0","koa-compress":"^4.0.1","koa-conditional-get":"^2.0.0","koa-etag":"^3.0.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","compressible":"^2.0.18","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged"}},"gitHead":"8bd1dbfb07a4840ca5017d02ae55a87c29feba63","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.2.2","_nodeVersion":"11.14.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-JvUq9sFzLmJxmqZbbCPfK2Lm0srPvOzRs/+4NkrNhzqtOjVZag2cNxrYDWgrWOsr3EFXIwt6Z+SrytU7mIsrGg==","shasum":"9314312d51072e354ae1824835d0f3a0360b6cf8","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.2.2.tgz","fileCount":32,"unpackedSize":273187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpckJCRA9TVsSAnZWagAA6MYP/invi87Q4pcn1Bppe2UT\nlGP4ZgvqY+xIP5Ld+hBbsAe40t8N6KXnc3LcIJHb++f2+8QSk8P+JM/VLYr1\nkGaTQrYg14KlJs+oZQW8RnBr1LDrSBEQ0Ickkq+/1/y3wVKyrCHbUaEMjzMR\nYCwP585+ZLzr4kOCtC5NsShUHV3EkD8LAQFS/QjLOSiFqVp6JhkINCOptVVo\nF1JUJ+VD+gLa8dIRV4nycT2tLarlFMuXabUNyHGATUOWfMOSJDGiwjTcYOLG\nN/gn7G9sV2H2KnP4mRo2iS2TwU7MOPa75/M0AIPE/8lFG4h/OmBsqdLxfGlz\nziweJ7ZHo5MxYVy4xiBI2807dCQzGUxQgxvs8+k+FmpedL8B3m9bTo6Ssp1E\nnV74T7dCyX59uRatJ9OxDMj18dBxFrFRXKhP6WaDLJKITc2EPVKpWnMxOjFe\nanhFlZ96p76c3C/O3scPlK1xsArd51AcAA5hknp3/8dPdulTxD3PZuXNuhAU\nnbEDXqXcqLSHYdlWzTN4C5NxyMPM/thNceeGnUS1yRXlWmqQdkUE8Ey2O/NK\n/RUBzW0ogVxPX0YAVwzgV4hoY35PEJ3ZlYyXbEAEknkaIG8qKtco+LTJUBpO\ngMpm/5yRWpt/hezOUE2at93vKn5ONVozyX3oR9G5jaIHVJSS1l2gDbGs8q2r\nL2Xp\r\n=/BzT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC77MLKGk7nWLqktBWrBNSuI46uYeCP8WRceQuTgpfdggIgbGcT7Z10FoSSvXN11rFvm9XeBsxNTIPqh5OIRypF0FU="}]},"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.2.2_1604700424485_0.22839524329623395"},"_hasShrinkwrap":false},"2.2.3":{"name":"apicache-plus","version":"2.2.3","scripts":{"lint":"eslint .","test":"nyc mocha test --ignore 'test/api/**' 'test/setup.js' --require 'test/setup.js' --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"@babel/core":"^7.10.2","@babel/preset-env":"^7.10.2","@babel/register":"^7.10.1","@koa/router":"^9.0.1","chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","koa":"^2.12.0","koa-compress":"^4.0.1","koa-conditional-get":"^2.0.0","koa-etag":"^3.0.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","compressible":"^2.0.18","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged"}},"gitHead":"483b25f60fb8942e64b6080d2f08639146832593","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.2.3","_nodeVersion":"11.14.0","_npmVersion":"7.21.0","dist":{"integrity":"sha512-Xt5xL3HwH6BT8BaXoibC9/bLPitOYPQflkRqFWAjjb/kOwT7RsfBkQj5sXo1IYSsnsA+jInwjbmXSeRGI2JW7w==","shasum":"da5d0d82e485e46e78cb1dd9491f676212046a3d","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.2.3.tgz","fileCount":32,"unpackedSize":273127,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG9zlTnApnofNoetKfkGI527AvaFPVePC7nO5zCX+C4hAiA3OPaujYZWM2i2UUF/4kvEhVIE/uBSUVH1kD2wV03j1Q=="}]},"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.2.3_1634239615605_0.1434595852907825"},"_hasShrinkwrap":false},"2.3.0":{"name":"apicache-plus","version":"2.3.0","scripts":{"lint":"eslint .","test":"nyc mocha test --ignore 'test/api/**' 'test/setup.js' --require 'test/setup.js' --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"@babel/core":"^7.10.2","@babel/preset-env":"^7.10.2","@babel/register":"^7.10.1","@koa/router":"^9.0.1","chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","koa":"^2.12.0","koa-compress":"^4.0.1","koa-conditional-get":"^2.0.0","koa-etag":"^3.0.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","compressible":"^2.0.18","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged"}},"gitHead":"caaa63152b300af8910500ed3618a9ba7b8e000c","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.3.0","_nodeVersion":"11.14.0","_npmVersion":"7.21.0","dist":{"integrity":"sha512-Ih/+kDomt84oKnBlKO2X4hQVvYNQ72Bha/4WaMMqYguvh4Sz5meczN9aLaCFUMfzMKBZBmYzo3hYr9ugZTvGFQ==","shasum":"abdb2cd04b85ea9cc35074eb2871d486c93f8e27","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.3.0.tgz","fileCount":32,"unpackedSize":275553,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsR+sCRA9TVsSAnZWagAANCwP/37i2PEerDo3yzseL1vO\n0vZ9Gy0bwsmbeqLsUlldCusNdupYpFh68k/q36gB4KJ3kA6LCav4JoOuM2Cd\nt7gpI78Jc6FS9/Q2uSUEUVxxVzv7kVL68WF5gtYTnhstHm+rAUjoFP+H30S8\nzKs/+j54KF76rn7Z+WB9jLmSjH7nTsgrFqyBG+haHtf9ix3casNMNEV3jhHH\nt+6KEIB7AK1nKPIDoIiH1jMsI+O+NgtGrkviP3W0pnQE8tRjZPXBkMWLX7mS\nThZbROQYoSgo4r6bMvIvPLjoJA+HtmIrkvuhCoUMu67MEL/RMAup5F5keGRI\nfV/Vyn3W3DielYq/vLrSRYdwVZyLZH2Q96R9hjcDnvNiHaKfm59QkLizFklh\nn8Gh5aWEedbV10AT0YlvNCH5AT+FUpIILKElm0HBuvOZFto4Y6lJJ6qbAyUz\nMBiGoZxmopPcTloiQmDDA8ntlsjrPAxZyQtcmE9FKhPOhPCZs3evoc/FIHg5\nDLN3cCbweCy8jEOXdclQ/FYLIZOiapTAgJZVOFtlKIyAtA0EeaHrcE39YDZH\ny0HhX4FzyRcNVJ/YTyNvq75D2A/icd0S2qB+G53/O0q03qJPCi1tMUxhLBAI\n3PxKdKZ4BILMKMU0id0LTY92x0cCGDLI0PvL65OQCICDNuPskFg31tviakWg\nWTrr\r\n=Tglk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDI1BwWhmthQKINKJjee+myvk6XwgDtra2KufQ2PY0XFAIhAJwM4HyLQXaO2QYcMjdLZm0dSmwY7du+yiduTLbGJxH6"}]},"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.3.0_1638997932788_0.9455888807766122"},"_hasShrinkwrap":false},"2.3.1":{"name":"apicache-plus","version":"2.3.1","scripts":{"lint":"eslint .","test":"nyc mocha test --ignore 'test/api/**' 'test/setup.js' --require 'test/setup.js' --recursive","test:watch":"npm run test -- --watch","coverage":"nyc report --reporter=text-lcov | coveralls","prepublishOnly":"npm run test"},"engines":{"node":">=6.2.0","npm":">=5.8.0"},"description":"Effortless api response caching for Express/Node using plain-english durations","main":"./src/apicache.js","repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"license":"MIT","bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"devDependencies":{"@babel/core":"^7.10.2","@babel/preset-env":"^7.10.2","@babel/register":"^7.10.1","@koa/router":"^9.0.1","chai":"^4.2.0","compression":"^1.7.4","coveralls":"^3.0.6","eslint":"^5.16.0","eslint-config-prettier":"^6.10.1","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","express":"^4.17.1","husky":"^1.3.1","ioredis":"^4.16.1","ioredis-mock":"^4.19.0","koa":"^2.12.0","koa-compress":"^4.0.1","koa-conditional-get":"^2.0.0","koa-etag":"^3.0.0","mocha":"^6.2.3","nyc":"^14.1.1","prettier":"^1.18.2","pretty-quick":"^1.11.1","restify":"^7.7.0","restify-etag-cache":"^1.0.12","supertest":"^4.0.2"},"dependencies":{"accepts":"^1.3.7","compressible":"^2.0.18","json.sortify":"^2.2.2","redlock":"^4.1.0","uuid":"^8.0.0"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged"}},"gitHead":"89a4c3cf913320ee144422df16e919e02741ed0a","homepage":"https://github.com/arthurfranca/apicache-plus#readme","_id":"apicache-plus@2.3.1","_nodeVersion":"11.14.0","_npmVersion":"7.21.0","dist":{"integrity":"sha512-kWNwPjT3TDfDvpoB6xI36R4V6qeDXRtw4HhxCVGr4ZrfqmI6XSynalUwLXgE9HAZz2daBKhfXuKwIocyolzcWQ==","shasum":"05ead18c4a803c4bba3d743fdcf7a1fb47887f08","tarball":"https://registry.npmjs.org/apicache-plus/-/apicache-plus-2.3.1.tgz","fileCount":32,"unpackedSize":275613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh01NtCRA9TVsSAnZWagAADfoP/RWVqLlwearegZZXN4fQ\nwGgPHo8jzXMXd/ZaMU1F4izLi/fZ0oDFHkWQD7yLXyCEf3BSXI1jTRNWCPaR\nz6xbdgDe1Z+szqp3DUnJorGjgdF3YMl2rQbJJGvsQujSAA2G/TgsiVX8dkz4\nGRUMYDoewyrEFybr+SanYEUU8JfB3NkcJjw/YoSAyZTNUmSlhk/ELRPHOPZe\nkqQZyWpWcSPh+FM8oqwQMff+nkhLsahinzVVdp3i310msab/CjlgtcxpsHis\nI2NiGZRMvG7luOz5lkxVvxA30cD55fMcZd7VBOEfjJ40nzurDPkA1FE+CLHp\njkKQw+wrz3qNcsAjf9Ag98mz3Y+e/iYV/P3u+uzR0Zk42UyPzJZskQN/IcaA\nbJa4xlT+lK1x05MfLt+vo5YkjLQ2gKBDOfARs1mRsf6yCR7RsnKk0jRfojR2\n9PMjEF7y6go/XbQ4fQnnytVxQDkyPr5AyI3tpvxWWfrkbMBgwfj5lf4ti4CJ\nyjmb6Z8C3vZ3g6Juakq9eUewwvNfYOwWFCUlVpFCLtW34JhiK9IltTARxA2J\nDrqmX4IAi94fU4hrUbRYgSjvWliFJwfhYwlTAu83rP9ZXlkrW7M3DBoWE8r5\ny8aaGOIbNyXp3xsU0ptRlkojvde83ptVDdwvRXrJw+otzXtOZMsO62heXeRo\nfCYI\r\n=Q+ag\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxb8UD4Z+UAVIIheUjvD/nUsFZIZfzJyADPMYqtPkjWwIhAMSFboPr2kWeB9581kx56JeossetpLIDlWCR0ff9QYey"}]},"_npmUser":{"name":"arthuraf","email":"arturoalemanha@gmail.com"},"directories":{},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apicache-plus_2.3.1_1641239404987_0.4571179065849922"},"_hasShrinkwrap":false}},"time":{"created":"2020-04-29T19:44:39.854Z","1.5.4":"2020-04-29T19:44:40.096Z","modified":"2022-04-11T14:38:11.269Z","1.5.5":"2020-05-07T21:02:25.010Z","1.6.0":"2020-05-08T15:26:55.238Z","1.7.0":"2020-05-14T14:44:50.824Z","1.8.0":"2020-05-15T18:53:22.445Z","2.0.0":"2020-05-27T22:27:35.658Z","2.0.1":"2020-05-28T19:58:27.443Z","2.0.2":"2020-06-02T18:45:46.376Z","2.1.0":"2020-06-03T18:41:38.080Z","2.1.1":"2020-06-03T21:27:41.093Z","2.1.2":"2020-06-13T22:28:38.370Z","2.1.3":"2020-06-17T19:57:11.146Z","2.2.0":"2020-06-19T14:26:21.210Z","2.2.1":"2020-06-19T18:06:09.458Z","2.2.2":"2020-11-06T22:07:04.607Z","2.2.3":"2021-10-14T19:26:55.949Z","2.3.0":"2021-12-08T21:12:12.966Z","2.3.1":"2022-01-03T19:50:05.158Z"},"maintainers":[{"name":"arthuraf","email":"arturoalemanha@gmail.com"}],"description":"Effortless api response caching for Express/Node using plain-english durations","homepage":"https://github.com/arthurfranca/apicache-plus#readme","keywords":["cache","API","redis","memcache","response","express","JSON","duration","middleware","memory"],"repository":{"type":"git","url":"git+https://github.com/arthurfranca/apicache-plus.git"},"author":{"name":"Arthur A. França","email":"arturoalemanha@gmail.com","url":"https://github.com/arthurfranca"},"bugs":{"url":"https://github.com/arthurfranca/apicache-plus/issues","email":"arturoalemanha@gmail.com"},"license":"MIT","readme":"# Effortless api response caching for Express/Node using plain-english durations.\n\n#### Supports Redis or built-in memory engine with auto-clearing.\n\n[![npm version](https://badge.fury.io/js/apicache-plus.svg)](https://www.npmjs.com/package/apicache-plus)\n[![node version support](https://img.shields.io/node/v/apicache-plus.svg)](https://www.npmjs.com/package/apicache-plus)\n[![Build Status via Travis CI](https://app.travis-ci.com/arthurfranca/apicache-plus.svg?branch=master)](https://app.travis-ci.com/arthurfranca/apicache-plus)\n[![Known Vulnerabilities](https://snyk.io/test/github/arthurfranca/apicache-plus/badge.svg?targetFile=package.json)](https://snyk.io/test/github/arthurfranca/apicache-plus?targetFile=package.json)\n[![NPM downloads](https://img.shields.io/npm/dt/apicache-plus.svg?style=flat)](https://www.npmjs.com/package/apicache-plus)\n\n## Why?\n\nBecause route-caching of simple data/responses should ALSO be simple.\n\n## Usage\n\nTo use, simply inject the middleware (example: `apicache('5 minutes', [optionalMiddlewareToggle], [optionalConfig])`) into your routes. Everything else is automagic.\n\n#### Cache a route\n\n```js\nimport express from 'express'\nimport apicache from 'apicache-plus'\n\nconst app = express()\n\napp.get('/api/collection/:id?', apicache('5 minutes'), (req, res) => {\n  // do some work... this will only occur once per 5 minutes\n  res.json({ foo: 'bar' })\n})\n```\n\n#### Cache all routes\n\n```js\nimport apicache from 'apicache-plus'\nimport express from 'express'\nconst app = express()\n\napp.use(apicache('5 minutes'))\n\napp.get('/will-be-cached', (req, res) => {\n  res.json({ success: true })\n})\n```\n\n#### Use with Redis for multiple benefits\n\n```js\nimport apicache from 'apicache-plus'\nimport Redis from 'ioredis'\nimport express from 'express'\nconst app = express()\n\n// if redisClient option is defined, apicache will use redis client\n// instead of built-in memory store\nconst cacheWithRedis = apicache.options({\n  redisClient: new Redis(),\n})\n\napp.get('/will-be-cached', cacheWithRedis('5 minutes'), (req, res) => {\n  res.json({ success: true })\n})\n```\n\n**Note:** We recommend ioredis for best support.\nIf using node-redis v3, it is important to set `detect_buffers: true`. Use `legacyMode: true` if v4+.\n\n#### Works great with compression middleware for lightning fast responses\n\n```js\nimport compression from 'compression'\nimport apicache from 'apicache-plus'\nimport express from 'express'\nconst app = express()\n\napp.use(compression())\napp.use(apicache('5 minutes'))\n```\n\n#### Purge cache easily whenever required\n\n```js\nimport apicache from 'apicache-plus'\nimport express from 'express'\nconst app = express()\n\n// cache all routes\napp.use(apicache('1 hour'))\n\n// show all books\napp.get('/api/books', (req, res) => {\n  // all GET requests to /api/books with any query/body params will be grouped for later purging\n  req.apicacheGroup = 'bookList'\n\n  res.json(Book.all(req.query))\n})\n\n// add a book, then purge related cache\napp.post('/api/books', (req, res) => {\n  Book.create(req.body.book)\n  // purge now that book list should be updated with one more book\n  apicache.clear('bookList')\n  res.end()\n})\n\n// delete a book, then purge related cache\napp.delete('/api/books/:id', (req, res) => {\n  Book.delete(req.params.id)\n  // purge now that book list should be updated with one less book\n  apicache.clear('bookList')\n  res.end()\n})\n```\n\n**Note:** It is better to purge by apicacheGroup name as shown above instead of purging by key name so to not need to manually overwrite Cache-Control header nor mess with key name creation logic\n\n#### Use with middleware toggle for fine control\n\n```js\nimport apicache from 'apicache-plus'\nimport express from 'express'\nconst app = express()\n\n// the default config is good enough, but if e.g you want to cache only responses of status 200\nconst onlyStatus200 = (req, res) => res.statusCode === 200\nconst cacheSuccesses = apicache('5 minutes', onlyStatus200)\n\napp.get('/api/missing', cacheSuccesses, (req, res) => {\n  res.status(404).json({ results: 'will not be cached' })\n})\n\napp.get('/api/found', cacheSuccesses, (req, res) => {\n  res.json({ results: 'will be cached' })\n})\n```\n\n## Custom Cache Keys\n\nSometimes you need custom keys (e.g. save routes per-session / user).\nWe've made it easy!\n\n**Note:** All req/res attributes used in the generation of the key must have been set\npreviously (upstream). The entire route logic block is skipped on future cache hits\nso it can't rely on those params.\n\n```js\nimport apicache from 'apicache-plus'\n\napicache.options({\n  append: (req, res) => res.session.id,\n})\n```\n\n## Unleash caching power with manual control\n\nYou may want to manually cache any value to retrieve super fast later if needed (with or without using apicache as middleware, you decide).\n\n```js\nimport apicache from 'apicache-plus'\nimport express from 'express'\nconst app = express()\n\n// \"authenticate\" is supposed to be a middleware that would set req.userId = id\napp.use(authenticate)\n// Optional: use apicache to cache routes\napp.use(\n  apicache(\n    '5 minutes',\n    { append: req => req.userId } // custom option to separate cache by user\n  )\n)\n\napp.get('/api/books', async function(req, res) {\n  let books\n\n  // manually check if what you want is already cached\n  if (await apicache.has('books')) {\n    // manually fetch from cache what you want\n    books = await apicache.get('books')\n  }\n\n  if (!books) {\n    books = await fetch('https://www.slow-external-api.com/all-books')\n      .then(res => res.json())\n      .then(async books => {\n        // manually cache what you want, for how long you need\n        await apicache.set('books', books, '1 hour')\n        return books\n      })\n  }\n\n  res.json(filterByUser(books, req.userId))\n})\n```\n\n## API\n\n- `apicache.options([globalOptions])` - getter/setter for global options. If used as a setter, this function is chainable, allowing you to do things such as... say... return the middleware.\n- `apicache.middleware([duration], [toggleMiddleware], [localOptions])` - the actual middleware that will be used in your routes. `duration` is in the following format \"[length][unit]\", as in `\"10 minutes\"` or `\"1 day\"`. A second param is a middleware toggle function, accepting request and response params, and must return truthy to enable cache for the request. Third param is the options that will override global ones and affect this middleware only.\n- `apicache([duration], [toggleMiddleware], [localOptions])` is a shortcut to `apicache.middleware([duration], [toggleMiddleware], [localOptions])`\n- `middleware.options([localOptions])` - getter/setter for middleware-specific options that will override global ones.\n- `apicache.getPerformance()` - returns current cache performance (cache hit rate)\n- `apicache.getIndex()` - returns current cache index [of keys]\n- `apicache.clear([target])` - clears cache target (key or group), or entire cache if no value passed, returns new index.\n- `apicache.set(key, value, [duration[, group[, [expirationCallback]]])` - manually store anything you want (async)\n- `apicache.get()` - get stored value by key (async)\n- `apicache.has(key)` - check if key exists (async)\n- `apicache.getKey(keyParts)` - useful for getting key name from auto caching middleware. Usage: `const key = await apicache.getKey({ method: 'GET', url: '/api/books/15', params: { aQueryParamX: 'value 1', aBodyParamY: 'value 2' }, appendice: 'userid-123-abc' })` then `await apicache.get(key)`\n- `apicache.newInstance([options])` - used to create a new ApiCache instance (by default, simply requiring this library shares a common instance)\n- `apicache.clone()` - used to create a new ApiCache instance with the same options as the current one\n\n#### Available Options (first value is default)\n\n```js\n{\n  debug:                false|true,          // if true, enables console output\n  defaultDuration:      '1 hour',            // should be either a number (in ms) or a number with a string, defaults to 1 hour\n  enabled:              true|false,          // if false, turns off caching globally (useful on dev)\n  isBypassable:         false|true,          // if true, bypasses cache by requesting with Cache-Control: no-store header\n  redisClient:          client,              // if provided, uses the [node-redis](https://github.com/NodeRedis/node_redis) or [ioredis](https://github.com/luin/ioredis) client instead of built-in memory cache\n  append:               fn(req, res),        // append takes the req/res objects and returns a custom value to extend the cache key\n  interceptKeyParts:    fn(req, res, parts), // change cache key name by altering the parts that make up key name (parts is an object auto-populated like this: { method: 'GET', url: '/api/test', params: { sort: 'desc', page: 2 }, appendice: 'userid-123-abc' }). For instance, if you want to cache with same key all requests to a specific route no matter the method (GET, POST etc): function(req, res, parts) { parts.method = ''; return parts }\n  headerBlacklist:      [],                  // list of headers that should never be cached\n  statusCodes: {                             // in most cases there is no need to set it as the default config will be enough\n    exclude:            [],                  // list status codes to specifically exclude (e.g. [404, 403] cache all responses unless they had a 404 or 403 status)\n    include:            []                   // list status codes to require (e.g. [200] caches ONLY responses with a success/200 code)\n  },\n  trackPerformance:     false|true,          // enable/disable performance tracking... WARNING: super cool feature, but may cause memory overhead issues\n  headers: {\n    // 'cache-control':  'no-cache'          // example of header overwrite\n  },\n  afterHit:             fn(req, res),        // run function after cache hits\n  optimizeDuration:     false|true,          // it can lower memory comsumption, when not using a cache client with a max memory policy (e.g. LRU key eviction), by overwriting some cache durations\n  shouldSyncExpiration: false|true           // force max-age syncing with internal cache expiration\n}\n```\n\n##### \\*Optional: Typescript Types (courtesy of [@danielsogl](https://github.com/danielsogl))\n\n```bash\n$ npm install -D @types/apicache\n```\n\n## Debugging/Console Out\n\n#### Using Node environment variables (plays nicely with the hugely popular [debug](https://www.npmjs.com/package/debug) module)\n\n```\n$ export DEBUG=apicache\n$ export DEBUG=apicache,othermoduleThatDebugModuleWillPickUp,etc\n```\n\n#### By setting internal option\n\n```js\nimport apicache from 'apicache-plus'\n\napicache.options({ debug: true })\n```\n\n## Official framework support\n\n- Express\n- Restify\n- Koa\n\n**Note:** When using Koa, set `ctx.state.apicacheGroup` instead of `req.apicacheGroup`. Also, consider option values such as `(req, res) => {}` as being `(ctx) => {}`. You can use Koa style naturally e.g. set `ctx.body` instead of calling `res.send`\n\n### Changelog\n\n- **v2.3.1** - improve serialization when manually adding to redis cache\n- **v2.3.0** - enhance concurrency behavior\n- **v2.2.3** - fix fetching big cached redis response\n- **v2.2.2** - fix redisCache.get method\n- **v2.2.1** - fix head request handler\n- **v2.2.0** - add Koa 2 support\n- **v2.1.3** - fix acquireLockWithId reference (thanks [@it4mag](https://github.com/it4mag))\n- **v2.1.2** - add compressible missing dependency (thanks [@rrgarciach](https://github.com/rrgarciach))\n- **v2.1.1** - fix RedisCache#releaseLockWithId\n- **v2.1.0** - add optimizeDuration option and set 'private' cache when fit\n- **v2.0.2** - add .middleware function overloading and improve cache-control setting\n- **v2.0.1** - fix cache.get(autoKeyName) when cache is compressed and make headerBlacklist case-insensitive\n- **v2.0.0** - major launch with better defaults for easier usage, manual caching (.get, .set, .has), new options and improved compatibility with third-party compression middlewares\n- **v1.8.0** - add isBypassable and afterHit options and extra 304 condition checks\n- **v1.7.0** - enforce request idempotence by cache key when not cached yet\n- **v1.6.0** - cache is always stored compressed, can attach multiple apicache middlewares to same route for conditional use, increase third-party compression middleware compatibility and some minor bugfixes\n- **v1.5.5** - self package import fix (thanks [@robbinjanssen](https://github.com/robbinjanssen))\n- **v1.5.4** - created apicache-plus from apicache v1.5.3 with backward compatibility (thanks [@kwhitley](https://github.com/kwhitley) and [all original library contributors](https://github.com/kwhitley/apicache#contributors))\n","readmeFilename":"README.md"}