{"_id":"nsql-cache","_rev":"9-65cbf413c246a3447bb04b7c39f37c67","name":"nsql-cache","dist-tags":{"latest":"1.1.5"},"versions":{"0.0.0":{"name":"nsql-cache","version":"0.0.0","description":"Advanced cache layer for NoSQL databases","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":"","license":"ISC","_id":"nsql-cache@0.0.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.4","_npmUser":{"name":"sebelga","email":"sabee77@gmail.com"},"dist":{"integrity":"sha512-FkkdnDnaSOHm9tMh2+F0CrNlGgpnHduzs5k5LXSg0cHQj74QXfHXS5BhaZ6w56sckr4eqTRIqq1xmvNusprCIQ==","shasum":"0080bf54c126dadca1789183d895831bf226dbd4","tarball":"https://registry.npmjs.org/nsql-cache/-/nsql-cache-0.0.0.tgz","fileCount":1,"unpackedSize":264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa7XqiCRA9TVsSAnZWagAAStAQAKN4jpbNQ3PNgg4MYZmd\n+XMhXVyxpNcosJ2aOoZLrX2QCmR+lYgG+C7JwQDIeaXppQNEBYX4ZbEVewAQ\n3xsk3/KSgIrGDYKqVWwn0L2kot4ZslraBlEt/D9ET4GuOmNVN3PoEDArgYAR\ng0VHCtZ/YJo0eoW2kSzx/m6EXLJpgGPUCpPZPPdN8UTFErcPlfJPtWqUsNiq\nkzC773LVWHIuP0mVTetOu/ybLdml/gcke1rHagV8puMyRFMyMipUz9y531gC\nN9O5bK+fkh7lW0KHtX+6HyRdMpbBvFDuq8abGERTpL2K4dzHMMQcRYzcyoUT\nwaIRPHFVJ/sHS/RVoKwyeLy33cEhNwZBdHV68l8HPqJ3ukFI2eLaQk8HS7/c\nSyMnmpTszGABRz5NpXw8Ef3b8BgeFYkJZ1sBQi5ocyvvgUCysDZbJYaSa/A1\n5kt3XcaCFxoQ3vmfS40c2gwXDtknl8tgK3Lyx8TeMLJy6hbMFfpfAUvRIdsy\nNGM5Dy7qx1c5nXNLxdM+oUVOGl2BD8JinagBf9Bb/avvCHCiPQLC11rJYbFu\npABCalc8aq0H0JzphxCe6N5D+v9Ht0qji+FOHT0i6gmEsJO5OSnFrabQnxq5\n5iXOacDorDIGHP4dTVLeEipoW9cnXWBSNzC1Qt7WcQFLiClbOHjyXmfZ09rZ\nav7r\r\n=aEg3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDK8E/0ZkYm2e6I0fxl1yVH+nKMstlWrJJLcDoMUocq5wIhAMjGmCQGHAwTGYrT+xYzhq7nQydORPZg7gJBL0RH2o4k"}]},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nsql-cache_0.0.0_1525512865452_0.08399327637287746"},"_hasShrinkwrap":false},"1.0.0":{"name":"nsql-cache","version":"1.0.0","description":"Advanced cache layer for NoSQL databases","main":"index.js","scripts":{"commit":"git-cz","lint":"eslint ./lib && eslint ./test","pretest":"npm run lint","prettier":"prettier --write \"{lib,test}/**/*.js\"","test":"mocha test --recursive --exit","e2e-test":"DATASTORE_EMULATOR_HOST=localhost:8081 mocha test/e2e.spec.js --recursive --e2e","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --recursive --exit","coveralls":"istanbul cover _mocha --report lcovonly -- -R spec --recursive --exit && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage","release":"standard-version"},"pre-commit":["prettier"],"engines":{"node":">=6.0"},"keywords":["cache","google datastore","gcloud node","google app engine","nodejs"],"repository":{"type":"git","url":"git+https://github.com/sebelga/nsql-cache.git"},"author":{"name":"Sébastien Loix"},"license":"MIT","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"bugs":{"url":"https://github.com/sebelga/nsql-cache/issues"},"homepage":"https://github.com/sebelga/nsql-cache#readme","dependencies":{"arrify":"^1.0.1","cache-manager":"^2.9.0","extend":"^3.0.1"},"devDependencies":{"babel-cli":"^6.26.0","babel-preset-es2015":"^6.24.1","cache-manager-redis-store":"^1.4.0","chai":"^3.5.0","commitizen":"^2.9.6","coveralls":"^3.0.1","cz-conventional-changelog":"^2.1.0","eslint":"^4.19.0","eslint-config-airbnb-base":"^12.1.0","eslint-config-prettier":"^2.9.0","eslint-import-resolver-webpack":"^0.9.0","eslint-plugin-import":"^2.11.0","eslint-plugin-mocha":"^4.11.0","eslint-plugin-prettier":"^2.6.0","istanbul":"^0.4.5","mocha":"^5.1.1","mocha-lcov-reporter":"^1.3.0","pre-commit":"1.2.2","prettier":"1.12.1","redis-mock":"^0.21.0","require-uncached":"1.0.3","rimraf":"2.6.2","sinon":"^4.2.0","standard-version":"^4.3.0","yargs":"11.0.0"},"gitHead":"932c11653a3deb2c4309134b9b9d0a3954a87cc9","_id":"nsql-cache@1.0.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.4","_npmUser":{"name":"sebelga","email":"sabee77@gmail.com"},"dist":{"integrity":"sha512-+s6mj2iqbFbG1ZjMyEtxxmpbZ3ZOVtFFq51Sxid394Nlx6vRH/HsCc4/upPcOM180bE05Oxz5Mbh9VczVWj1gw==","shasum":"1c0bc2045a71adf2eabff5d7eee20aacad47aed8","tarball":"https://registry.npmjs.org/nsql-cache/-/nsql-cache-1.0.0.tgz","fileCount":24,"unpackedSize":8038848,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa7c/4CRA9TVsSAnZWagAAAp0P/2heJRR53j//sz9AItcQ\nzYvFdkqIzoZGn5xOCWIrRm0ElI5BmQmBFHnza1mS20H9EiOWrd1hOY7NWbaS\nUHQ3Df1uShjB6FsY1ZnSUgUlMCxI7jLsn89xLeZBxBY8UPva7ivvJhO5ZW3+\nDoI3TpQGcfKD7J+vUVqJrLhK20KP/x00sAkF+JPA8TXeMo1dcBpaIyawiT1n\n7L/YP7GTUlD7bxhpfbscLYCrc7mutedhZf9T0kSyEkyMs1hX502LLTrHS1V/\nnc0L/YXc/JlNco5ppzGfYxlG2VKHrWbBFDdqwoMR+rtUke9dD4mCJ6PEKGXQ\nlZefXLq/WZtj88y/AYDwyEIbE22MhcogiRmCMbR0KzbpZWpAkHCkSS+pku6a\n7W0C44bTyYyVXMDqsl2ISWx2tBRGBAQxIOkn0sAoivLuPJnVEGquB+PMFNbh\n99KrmLVYEN2YP6N4dPModu4oGSsatECmDB9dXtYPij8Y1w8m9QclWvUPw24Q\nWWJfCErqsyomW68GCtJgqJGQBQAXZg78utXSy87yNjwzFhX1rbk4iLOrGeWq\nCNOsfUEBB9fG94wmUQhCiCcTlPYevl4SfqJ6o6dLYkObSNzQ+xAyeqk/H+zd\nBMLug35JECGQxQLqJrChKjCkEA1qAZQNW4SeEXgrYBGP5lWmSJ4cdHXVld+B\nJik9\r\n=jXdP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtI7K9bWi/7RQtC9X4tPCvAtVCX1ZaR3RhLr5290y6cwIhAL/yfJijb4AOUl5+xoHVGodsfhTmzyOPceJRa62z8OuK"}]},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nsql-cache_1.0.0_1525534710722_0.6983188321073082"},"_hasShrinkwrap":false},"1.0.1":{"name":"nsql-cache","version":"1.0.1","description":"Advanced cache layer for NoSQL databases","main":"index.js","scripts":{"commit":"git-cz","lint":"eslint ./lib && eslint ./test","pretest":"npm run lint","prettier":"prettier --write \"{lib,test}/**/*.js\"","test":"mocha test --recursive --exit","e2e-test":"DATASTORE_EMULATOR_HOST=localhost:8081 mocha test/e2e.spec.js --recursive --e2e","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --recursive --exit","coveralls":"istanbul cover _mocha --report lcovonly -- -R spec --recursive --exit && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage","prerelease":"npm run test","release":"standard-version"},"pre-commit":["prettier"],"engines":{"node":">=6.0"},"keywords":["cache","google datastore","gcloud node","google app engine","nodejs"],"repository":{"type":"git","url":"git+https://github.com/sebelga/nsql-cache.git"},"author":{"name":"Sébastien Loix"},"license":"MIT","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"bugs":{"url":"https://github.com/sebelga/nsql-cache/issues"},"homepage":"https://github.com/sebelga/nsql-cache#readme","dependencies":{"arrify":"^1.0.1","cache-manager":"^2.9.0","extend":"^3.0.1"},"devDependencies":{"babel-cli":"^6.26.0","babel-preset-es2015":"^6.24.1","cache-manager-redis-store":"^1.4.0","chai":"^3.5.0","commitizen":"^2.9.6","coveralls":"^3.0.1","cz-conventional-changelog":"^2.1.0","eslint":"^4.19.0","eslint-config-airbnb-base":"^12.1.0","eslint-config-prettier":"^2.9.0","eslint-import-resolver-webpack":"^0.9.0","eslint-plugin-import":"^2.11.0","eslint-plugin-mocha":"^4.11.0","eslint-plugin-prettier":"^2.6.0","istanbul":"^0.4.5","mocha":"^5.1.1","mocha-lcov-reporter":"^1.3.0","pre-commit":"1.2.2","prettier":"1.12.1","redis-mock":"^0.21.0","require-uncached":"1.0.3","rimraf":"2.6.2","sinon":"^4.2.0","standard-version":"^4.3.0","yargs":"11.0.0"},"gitHead":"4163608b3a09f6f364e917defe39b1a2922a2913","_id":"nsql-cache@1.0.1","_npmVersion":"5.7.1","_nodeVersion":"8.9.4","_npmUser":{"name":"sebelga","email":"sabee77@gmail.com"},"dist":{"integrity":"sha512-2143wkdXsabSJGoUwucIrjrwgIQ3V3NzxlnAbUmkvFBrw8AnCL+071+vI+S4M5Fj9gOAd2Eay4woJi50MFBjuw==","shasum":"af3ffeb0252da467c27eaab03debafde64d37944","tarball":"https://registry.npmjs.org/nsql-cache/-/nsql-cache-1.0.1.tgz","fileCount":26,"unpackedSize":8038953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa7x23CRA9TVsSAnZWagAAPcQP/Rl6Fw73QES0f+GZOW3R\nn9aG16dBQd1M4e+iT5OtQpMgLNk5Y/8e704UY98RigYBRcOVmuFZo9+G79TT\nqeem94m4Yrpzm/ny+kXHFkcflwp0yyLkXENVY//zeTYIfoP0w8mRDaTW4m6s\nmh8SmvibU6UtgUzQX/6hdZJQBCCcsWS3IcBh6LHlWnXFJ/PUeEVqTM6wqRqO\nveMbOKFJI2mQfmOWE7abNvnqSVWnwZf8gRjrxMcrb+elCnBqIGEzI6VMg2zR\n3AqEYNYftZimqnxl+RNY6lJrnMErKH/ium5+LJrVfvp1G820yFeorpQei8Hk\nP5smI+j9x3vfoXII7CtvBOK1yyhILpQr/pAzbkNrTMvB32541YAc1AmylBe+\nevQMLg+74B85xJbHWF8czShdDFGo4kW15+SC3y6aMW8q2G5mCodb/yEb+g/o\nrz1cwlZpbJDrqNcyC9lSECNmHyueEXucFwFURcRxyCkzb+F/TR+1qPHVmUVD\no9mrZt39aTvzBsHVRn4JNtbjtReVB6qxlkid+QwDdoodBAjJyHyKvik0FV6f\noTIsq+PcwloePUr/SWt3DCXIsKG3i1aWo7ZE4Y505plUceZj8s6T5KBLE5rU\niEJ2K6FiWqUGJwSr7mZ1LERLMf13dograJkhCRiWhSzb+F0KBsd5OvECoU7o\ncWDC\r\n=oDIn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBpnB63PqZiqtnySX8u8GaFYfhqD21BdXJcyYUNrzJfkAiAare+b4XYO6KBQAw0qrbveX9H2lHppWb/eiOk/A5Q/xA=="}]},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nsql-cache_1.0.1_1525620148852_0.10412498139619286"},"_hasShrinkwrap":false},"1.1.0":{"name":"nsql-cache","version":"1.1.0","description":"Advanced cache layer for NoSQL databases","main":"index.js","scripts":{"commit":"git-cz","lint":"eslint ./lib && eslint ./test","pretest":"npm run lint","prettier":"prettier --write \"{lib,test}/**/*.js\"","test":"mocha test --recursive --exit","e2e-test":"DATASTORE_EMULATOR_HOST=localhost:8081 mocha test/e2e.spec.js --recursive --e2e","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --recursive --exit","coveralls":"istanbul cover _mocha --report lcovonly -- -R spec --recursive --exit && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage","prerelease":"npm run test","release":"standard-version"},"pre-commit":["prettier"],"engines":{"node":">=6.0"},"keywords":["cache","google datastore","gcloud node","google app engine","nodejs"],"repository":{"type":"git","url":"git+https://github.com/sebelga/nsql-cache.git"},"author":{"name":"Sébastien Loix"},"license":"MIT","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"bugs":{"url":"https://github.com/sebelga/nsql-cache/issues"},"homepage":"https://github.com/sebelga/nsql-cache#readme","dependencies":{"arrify":"^1.0.1","cache-manager":"^2.9.0","extend":"^3.0.1"},"devDependencies":{"babel-cli":"^6.26.0","babel-preset-es2015":"^6.24.1","cache-manager-redis-store":"^1.4.0","chai":"^3.5.0","commitizen":"^2.9.6","coveralls":"^3.0.1","cz-conventional-changelog":"^2.1.0","eslint":"^4.19.0","eslint-config-airbnb-base":"^12.1.0","eslint-config-prettier":"^2.9.0","eslint-import-resolver-webpack":"^0.9.0","eslint-plugin-import":"^2.11.0","eslint-plugin-mocha":"^4.11.0","eslint-plugin-prettier":"^2.6.0","istanbul":"^0.4.5","mocha":"^5.1.1","mocha-lcov-reporter":"^1.3.0","pre-commit":"1.2.2","prettier":"1.12.1","redis-mock":"^0.21.0","require-uncached":"1.0.3","sinon":"^4.2.0","standard-version":"^4.3.0","yargs":"11.0.0"},"gitHead":"fd508850168387774242c06ef310a4387eba24ff","_id":"nsql-cache@1.1.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.4","_npmUser":{"name":"sebelga","email":"sabee77@gmail.com"},"dist":{"integrity":"sha512-cNB+H3QYHPzP5JzzqKzbZkkvG6RMv7AdhTAzGR5DBzxQcwLauPOPgKIjItOfcpfDKcRJjxJNUJB0sj5oQPoPuA==","shasum":"a4d01afa658083c023080d61926ebef248e8fd71","tarball":"https://registry.npmjs.org/nsql-cache/-/nsql-cache-1.1.0.tgz","fileCount":26,"unpackedSize":8039557,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8Tl0CRA9TVsSAnZWagAAyMsP/1Lh7q5JSLCj9o3rZy3v\nn2ATXaNT8Iiaxw6jKnwqPo6re2QQ/u8KkJlFnnk6Iln4FbyQYsg/9cJInZJW\n6VeBWLdiuID+ax4FqfaTXZ8kP/IJ1fk2wVVUTCZtmzUziKJfMqc9LXGx4KiI\nnsGfEQP6BlQtZ29uHO1lqV3ITs1jnxcBhY0bj++sohJ2FKoyu0IHYJL3IiqY\nEpDz92W3N1X/lS5zxRNcRWFsIYpUxNBxM6c+mIgTmpY1X1zuGIT/PXwE8Fy3\n3DzfZWWuWx0HXsAlTcz6crUyNnqEzSJkBwwZRsz5Wv+TZe5Caz8hObiL7PjB\nhLiMcqNm4314FLJ/s4nayeuOy+aC9pZ+ntheewgvyHzrZUFrZItiQJ+jDiRI\nVQJit4E7LZ0iYu7myl/dOv+/OUq8t0W0MfE1FBTRfpcPfIKtGpwZPeOsNtgW\nUznDBO1V4IvJoWKDsuNKfg6M5ifWrYidI0kpcyV/PIOJUOXnKwU4YWzJZeqf\nUeBmnQy8Gpt7F4ao2/jwckE1s8p9LAf+oWQL3mXRLQJxxt8TuMwIX3LjwDpv\niIW2lWKODyQ7Tfy8GhVFjwp98CGvRzcmGTgFIzC3BmHk49mJqD6j5RVR2IOB\nQu6vbuOpPQ68hnITrIRXZ0D9sW/jO8VfF1oZ4bDV7m1ma2X1vzDG5IS0yvAY\nevnl\r\n=0PqH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcvKOtLbtAbqQdt2tFM57BNYXEPo+d5W/AuywNrgLX6gIhAN2wAPzqT5BczC048Z2DHM5Exkmzs9LvhbEDM26YWKHY"}]},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nsql-cache_1.1.0_1525758322526_0.8016532719772644"},"_hasShrinkwrap":false},"1.1.1":{"name":"nsql-cache","version":"1.1.1","description":"Advanced cache layer for NoSQL databases","main":"index.js","scripts":{"commit":"git-cz","lint":"eslint ./lib && eslint ./test","pretest":"npm run lint","prettier":"prettier --write \"{lib,test}/**/*.js\"","test":"mocha test --recursive --exit","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --recursive --exit","coveralls":"istanbul cover _mocha --report lcovonly -- -R spec --recursive --exit && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage","prerelease":"npm run test","release":"standard-version"},"pre-commit":["prettier"],"engines":{"node":">=6.0"},"keywords":["cache","google datastore","gcloud node","google app engine","nodejs"],"repository":{"type":"git","url":"git+https://github.com/sebelga/nsql-cache.git"},"author":{"name":"Sébastien Loix"},"license":"MIT","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"bugs":{"url":"https://github.com/sebelga/nsql-cache/issues"},"homepage":"https://github.com/sebelga/nsql-cache#readme","dependencies":{"arrify":"^1.0.1","cache-manager":"^2.9.0","extend":"^3.0.1"},"devDependencies":{"babel-cli":"^6.26.0","babel-preset-es2015":"^6.24.1","cache-manager-redis-store":"^1.4.0","chai":"^3.5.0","commitizen":"^2.9.6","coveralls":"^3.0.1","cz-conventional-changelog":"^2.1.0","eslint":"^4.19.0","eslint-config-airbnb-base":"^12.1.0","eslint-config-prettier":"^2.9.0","eslint-import-resolver-webpack":"^0.9.0","eslint-plugin-import":"^2.11.0","eslint-plugin-mocha":"^4.11.0","eslint-plugin-prettier":"^2.6.0","istanbul":"^0.4.5","mocha":"^5.1.1","mocha-lcov-reporter":"^1.3.0","pre-commit":"1.2.2","prettier":"1.12.1","redis-mock":"^0.21.0","require-uncached":"1.0.3","sinon":"^4.2.0","standard-version":"^4.3.0","yargs":"11.0.0"},"gitHead":"b3ccbf380eea267268bb3f415d62e534a5dd2538","_id":"nsql-cache@1.1.1","_npmVersion":"6.1.0","_nodeVersion":"8.9.4","_npmUser":{"name":"sebelga","email":"sabee77@gmail.com"},"dist":{"integrity":"sha512-Xnf/hsLQUHjym1jdQuCQr9eqPto/wyma0NZI5gFzpVCjaMTIoiq/yEWM+3gxCNFH0Jxc5ZT1d5fkH481nJii4g==","shasum":"e0d2298d9a1311e107eec0f24fdc86595ec0b816","tarball":"https://registry.npmjs.org/nsql-cache/-/nsql-cache-1.1.1.tgz","fileCount":19,"unpackedSize":7833227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbVKvCCRA9TVsSAnZWagAApxkP/jblOphvVJSBoL6PhVK4\nPQLyuxBs0FrF1FnR7ufHmj6clmUKGnEoD1h8V30QjcOVhnLJflnMD6GTy8tr\nzvnDaoqHVishQEkzQAZBlShq/IN4jmhIZ+NDKDZZT6GOpHVNft+xqwJA2BIt\nMu4nF6pg14rgFYG4oa1fNGMoSX5zNhwTHvDe7WaH75mPEKowPPeHXaeFkoGm\n61oHiSSdT4DfRlpY2G36lE8gJLABbfYLZVzwop8H+Y57Nzic31Z0AWcSUzyK\nPIOKmMsRqq/BLyMUPlPTLhHf+nIc2ZLW1FCQ+kvv80mPkgezAbf/9bAEtCQl\nRUbWd2zDHBaKJpBK4xNKSAbvEaJpvKcRI+DuRcjzfXe2PGhs0W6cRnQD7VOY\nTEM9iMUuAAWo6khFsp6n8mjUbaD35lqKZB6lJzQ6E2CMEVldacnS384oZWVZ\n7nsR+HfO+89wOhh3IMxPXst08hG+GBgGS9/JSiRne7zHxW6A8/D2mQuzFHSU\n1QHu4UNSiQ/mVD5mMwD3Sp2gW+NjrUBZyKAZl9RfFGRppQnKiiaxsV8HPlJF\nt3/eay09LFwXiVEGL1Zjw3INR/VJWZrgxsY4nBF/3zn11unXFSXRwbg+8nNv\nVji7l8eZfoQq7gHvL/GtnaFOIOFXZRUw0043d3uOVxGtFOhBV6HQglArTPhQ\nOCe3\r\n=ljsu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7AWaji74CbugleuWdWh1gVOB4X9+wNUkM2ygpeFeM3AiEAhrOR4H5kyO29or7s9wJNX9YUnU6BS4+57ptFjbncX6Q="}]},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nsql-cache_1.1.1_1532275649831_0.2666998339596618"},"_hasShrinkwrap":false},"1.1.2":{"name":"nsql-cache","version":"1.1.2","description":"Advanced cache layer for NoSQL databases","main":"index.js","scripts":{"commit":"git-cz","lint":"eslint ./lib && eslint ./test","pretest":"npm run lint","prettier":"prettier --write \"{lib,test}/**/*.js\"","test":"mocha test --recursive --exit","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --recursive --exit","coveralls":"istanbul cover _mocha --report lcovonly -- -R spec --recursive --exit && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage","prerelease":"npm run test","release":"standard-version"},"pre-commit":["prettier"],"engines":{"node":">=6.0"},"keywords":["cache","google datastore","gcloud node","google app engine","nodejs"],"repository":{"type":"git","url":"git+https://github.com/sebelga/nsql-cache.git"},"author":{"name":"Sébastien Loix"},"license":"MIT","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"bugs":{"url":"https://github.com/sebelga/nsql-cache/issues"},"homepage":"https://github.com/sebelga/nsql-cache#readme","dependencies":{"arrify":"^1.0.1","cache-manager":"^2.9.0","extend":"^3.0.1"},"devDependencies":{"babel-cli":"^6.26.0","babel-preset-es2015":"^6.24.1","cache-manager-redis-store":"^1.4.0","chai":"^3.5.0","commitizen":"^2.9.6","coveralls":"^3.0.1","cz-conventional-changelog":"^2.1.0","eslint":"^4.19.0","eslint-config-airbnb-base":"^12.1.0","eslint-config-prettier":"^2.9.0","eslint-import-resolver-webpack":"^0.9.0","eslint-plugin-import":"^2.11.0","eslint-plugin-mocha":"^4.11.0","eslint-plugin-prettier":"^2.6.0","istanbul":"^0.4.5","mocha":"^5.1.1","mocha-lcov-reporter":"^1.3.0","pre-commit":"1.2.2","prettier":"1.12.1","redis-mock":"^0.21.0","require-uncached":"1.0.3","sinon":"^4.2.0","standard-version":"^4.3.0","yargs":"11.0.0"},"gitHead":"adebcca62533b3d8e75128ee340d4a3f973485e9","_id":"nsql-cache@1.1.2","_npmVersion":"6.1.0","_nodeVersion":"8.9.4","_npmUser":{"name":"sebelga","email":"sabee77@gmail.com"},"dist":{"integrity":"sha512-JFRQb/trmKjT6FiCXB3QrhYTl3QNysy8ay5y4lo1LYO5xKk8Aj9lQrTopch+80VRTOX8hOH4EJKpEzC6H/MGJA==","shasum":"c4c61456a0aab63b53732acba287be8ee80d6695","tarball":"https://registry.npmjs.org/nsql-cache/-/nsql-cache-1.1.2.tgz","fileCount":19,"unpackedSize":7833736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaSfECRA9TVsSAnZWagAAMs8P/2DSzzg9VCK7qdf0V4EM\ndfBFgQslFu4FYAwCHDsHBBdUmnPEAhZYd+Oc6+6CifmJdaBHH5JmP1dL1uDv\nshXoik9VWnFwH6gk3Cc1/ux6lgjJfAuv56Jf6KLsSBY/hXU74HOsg5SiOM5W\nLbh8dkMeHLbSftKeIWKsY5X45jzjeX91+LpF77UzkBQsgcqFnwBczfJmAbQG\nDp7pp0rPKZJsIZGipBshlLZxEKE2KyhOWqfkPMM1IAuNQCw2qP+nVD7uXbzD\nGxapgsYo8gUey1rKiqPI3iSuSjO5QcUc14+HRlPKVBOsoR+YdR1BWcP0u4Ou\nl0IojLk+wn5of6deoLUVbhnHMlAjZiCBQH23NCc8lJFI+xT024ki5zptA8Fw\nuoEN9y9LqRfq3fK+lRdkieW0QLDJwpV4md7NROmdFOZArc47yqqZl0suV4bl\nTE+VcUsN047IeZEy0TS0OzuIh1LndrFBwUZnI+3CUUzxm3Izh5UxfVJAL6o/\nFYHBJPwfb9aJOUP16MKAn4AGFKDlTD1QapY9BrsxI9giOKOZ/OBrohGH8/sz\nt6sug7ADjlSodc0otH99ZmOUNj/50oTrTv8cm2UmhzJle6aVJQ5v5PCJJhoV\nSrlIaILgVbRK+p6lZxz+E/GePRg6ypQJRSyY/HSuP8MiOuYx3AMD0ksDRlkP\n7XID\r\n=U1kD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsxEX5yq3IdTnyx6X65X3AfWk57BKoP5TNhU/sXePZGgIgXzllq86AKWJA85X5DTXCwt50iRNlvgwL0caRIlcFmXA="}]},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nsql-cache_1.1.2_1533618115331_0.904430772033129"},"_hasShrinkwrap":false},"1.1.3":{"name":"nsql-cache","version":"1.1.3","description":"Advanced cache layer for NoSQL databases","main":"index.js","scripts":{"commit":"git-cz","lint":"eslint ./lib && eslint ./test","pretest":"npm run lint","prettier":"prettier --write \"{lib,test}/**/*.js\"","test":"mocha test --recursive --exit","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --recursive --exit","coveralls":"istanbul cover _mocha --report lcovonly -- -R spec --recursive --exit && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage","prerelease":"npm run test","release":"standard-version"},"pre-commit":["prettier"],"engines":{"node":">=6.0"},"keywords":["cache","google datastore","gcloud node","google app engine","nodejs"],"repository":{"type":"git","url":"git+https://github.com/sebelga/nsql-cache.git"},"author":{"name":"Sébastien Loix"},"license":"MIT","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"bugs":{"url":"https://github.com/sebelga/nsql-cache/issues"},"homepage":"https://github.com/sebelga/nsql-cache#readme","dependencies":{"arrify":"^1.0.1","cache-manager":"^2.9.0","extend":"^3.0.1"},"devDependencies":{"babel-cli":"^6.26.0","babel-preset-es2015":"^6.24.1","cache-manager-redis-store":"^1.4.0","chai":"^3.5.0","commitizen":"^2.9.6","coveralls":"^3.0.1","cz-conventional-changelog":"^2.1.0","eslint":"^4.19.0","eslint-config-airbnb-base":"^12.1.0","eslint-config-prettier":"^2.9.0","eslint-import-resolver-webpack":"^0.9.0","eslint-plugin-import":"^2.11.0","eslint-plugin-mocha":"^4.11.0","eslint-plugin-prettier":"^2.6.0","istanbul":"^0.4.5","mocha":"^5.1.1","mocha-lcov-reporter":"^1.3.0","pre-commit":"1.2.2","prettier":"1.12.1","redis-mock":"^0.21.0","require-uncached":"1.0.3","sinon":"^4.2.0","standard-version":"^4.3.0","yargs":"11.0.0"},"gitHead":"a3cc92ad1c8001e3a688cda2b71f1733f44d677e","_id":"nsql-cache@1.1.3","_npmVersion":"6.1.0","_nodeVersion":"8.9.4","_npmUser":{"name":"sebelga","email":"sabee77@gmail.com"},"dist":{"integrity":"sha512-81k+uHnh8mjXAoyaBy/HVikTDrYZRexBajC4WjDIUizGIm4j9Gghs3UpFGZJQCjOEMYCVNvFBq9DF/5kysJY0g==","shasum":"087107ceed383d55b3e599a1a3585943384dc004","tarball":"https://registry.npmjs.org/nsql-cache/-/nsql-cache-1.1.3.tgz","fileCount":19,"unpackedSize":7834395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbeDj3CRA9TVsSAnZWagAAv3kP/3VK85eax0kcRQdYBNKO\nRHMmpFAjw4D0FhT38m5NDPTNnQCWO7T38W2A7uBWYuW0KYEIn7vOlxRAIVa1\nsonQDtyhYiVcJF6OwRHot1vBxX+8mvnKbZHhUyQP+Vm5rIT6q96LSEuC8bEz\nZXC9VmM+KfG6F8Q4rpjI7G6uTZbZdmApUPpKOz8KC3KXB+Ldmr617wEA0pl4\nWbhu4gnyuP8Y4DVXDwu8Ghvctp4v6TWsSTWlVQhIFYbvkKdreIdbM3SvtG8L\n5OUQjCc2yxKfYidRqwGD5/IqkAYG5O+0A31XN3AemQCOwGU67M3oeq8JgcZm\n5j18QxXZHTTB3pMNlr9TzANpJnBUMcg/9KbCjYGZ/qUwQZdKK4K2vPlvzBDO\ncx48MhsJBMneJLbUCGhlax2eU+8mHpRSCO63B7io9HbMebCXtiSRJX5J+SsH\nDnW4vtHZW0c4FckYQakiifQJ+gqbnRaWcOoMxR+6PQPIuOWVN9JdH5ViAxJa\nEJ8SwGyT+E/zzDLA9/km8GjKragzwV8LyvO1dzsxmnxqyD65omH5vW4Mc8bw\n20i1fqoONHZT7r6ljYJcdjijUAFgIE4pQ2+KudSnt8AdFRAiEknLcJbhjYTe\nS86ypb71PLjZ/DeuImFUDB4MYtzdJUvkIu3S3ylb4wczen/SMPphrNeADaVY\nq641\r\n=BBd+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7KK2YKfo5EslENjMhTrgHZ4wrY3sf2q3ghLV7uw6uZAiEA3ffTcDPaiZ0X07R82HbL/0ZLRqZMkY+lpS22r8JKtnA="}]},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nsql-cache_1.1.3_1534605557893_0.07494105323455691"},"_hasShrinkwrap":false},"1.1.4":{"name":"nsql-cache","version":"1.1.4","description":"Advanced cache layer for NoSQL databases","main":"index.js","scripts":{"commit":"git-cz","lint":"eslint ./lib && eslint ./test","pretest":"npm run lint","prettier":"prettier --write \"{lib,test}/**/*.js\"","test":"mocha test --recursive --exit","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --recursive --exit","coveralls":"istanbul cover _mocha --report lcovonly -- -R spec --recursive --exit && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage","prerelease":"npm run test","release":"standard-version"},"pre-commit":["prettier"],"engines":{"node":">=6.0"},"keywords":["cache","google datastore","gcloud node","google app engine","nodejs"],"repository":{"type":"git","url":"git+https://github.com/sebelga/nsql-cache.git"},"author":{"name":"Sébastien Loix"},"license":"MIT","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"bugs":{"url":"https://github.com/sebelga/nsql-cache/issues"},"homepage":"https://github.com/sebelga/nsql-cache#readme","dependencies":{"arrify":"^1.0.1","cache-manager":"^2.9.0","extend":"^3.0.1"},"devDependencies":{"babel-cli":"^6.26.0","babel-preset-es2015":"^6.24.1","cache-manager-redis-store":"^1.4.0","chai":"^3.5.0","commitizen":"^2.9.6","coveralls":"^3.0.1","cz-conventional-changelog":"^2.1.0","eslint":"^4.19.0","eslint-config-airbnb-base":"^12.1.0","eslint-config-prettier":"^2.9.0","eslint-import-resolver-webpack":"^0.9.0","eslint-plugin-import":"^2.11.0","eslint-plugin-mocha":"^4.11.0","eslint-plugin-prettier":"^2.6.0","istanbul":"^0.4.5","mocha":"^5.1.1","mocha-lcov-reporter":"^1.3.0","pre-commit":"1.2.2","prettier":"1.12.1","redis-mock":"^0.21.0","require-uncached":"1.0.3","sinon":"^4.2.0","standard-version":"^4.3.0","yargs":"11.0.0"},"gitHead":"0b593fa992ba096bb781af493def2190e4bf85f0","_id":"nsql-cache@1.1.4","_npmVersion":"6.1.0","_nodeVersion":"8.9.4","_npmUser":{"name":"sebelga","email":"sabee77@gmail.com"},"dist":{"integrity":"sha512-E8LxBzf/Q6URAlkZZ6HIVTUGeiWYApf315pMfbPAE9FWHBB9rUzksm5XvrGDEYz/swUsEn4xvkayCgVvKpeKwg==","shasum":"8f408ce478b2f9338659ba27143435c1371405b9","tarball":"https://registry.npmjs.org/nsql-cache/-/nsql-cache-1.1.4.tgz","fileCount":18,"unpackedSize":6627557,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbgqEyCRA9TVsSAnZWagAAAcoP/3AI1KVPB5ivP8z1CZ3u\nnbT9VcFxK39hhqMMHYR19LJ6wq5NDAC0nVO/FtVze3f5Jbb1zlS2B5gBdezW\nouegLPRdnv12pd5OwDRdz5zYZbZIMjBwTDisbQYki50X67tNaUTSA1H1lIVx\n3BdcT5+IKVFm5LpA9aFhzWgbUrSYKMLAzKU0ERTuiN3joZj6lqQkUh3ScYDC\nGQqeoHsjVREyMOchcilBkmrdhz0p30YlbclPa3mxAp3Fx710MLHpQPeUFx3T\nz+j9sf3Vd2rB/AykKh0nx80w9/MY/WN2eNyq7dxF5x9+4JQXMgoWFkmwZyTD\n7NlC6IBw0PkEAnYZRrhUz3byhLQ+rj6KzlgrYQBFCySo0/DkeFkGVjihIKtb\n6hskxQwUvLtji1oXZrV6Cx4U+YSGKrAGaB4kV9sA2y0a7YdtzgD4AgA3D8aw\nHoxJyvsGP8dF8nL9gOGZKW3LIsRE1+AJei6aIRIko4tScBgNpMMfW0m+H5Ca\nzhRnuQHWGzegdCd+W2+42mJka+Dmqw0BFETVhJdY234fhHjlxlWw3qOpEk9p\niuODgnL6WG8uaY3fANDZWiEgBtSyXbp3WNgwLbTWexUrFW2EYWZ5NDE/Pe1+\n2NwcbTFf7VF8BgP0T1LcJqJLqNUdpJ5ZSX/jtK1pbIqIa6Lr92DNrrCwrED6\nyyb/\r\n=RrRi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6Y/IonrZR1oQGdm5E6f/tKzRIuoabDcZylhUT3f/tBAIgLV0T7U4x80/3sEucDfiiY/do014dtAFd/WWV1fkVZOU="}]},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nsql-cache_1.1.4_1535287601245_0.3335150285752404"},"_hasShrinkwrap":false},"1.1.5":{"name":"nsql-cache","version":"1.1.5","description":"Advanced cache layer for NoSQL databases","main":"index.js","scripts":{"commit":"git-cz","lint":"eslint ./lib && eslint ./test","pretest":"npm run lint","prettier":"prettier --write \"{lib,test}/**/*.js\"","test":"mocha test --recursive --exit","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --recursive --exit","coveralls":"istanbul cover _mocha --report lcovonly -- -R spec --recursive --exit && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage","prerelease":"npm run test","release":"standard-version"},"pre-commit":["prettier"],"engines":{"node":">=6.0"},"keywords":["cache","google datastore","gcloud node","google app engine","nodejs"],"repository":{"type":"git","url":"git+https://github.com/sebelga/nsql-cache.git"},"author":{"name":"Sébastien Loix"},"license":"MIT","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"bugs":{"url":"https://github.com/sebelga/nsql-cache/issues"},"homepage":"https://github.com/sebelga/nsql-cache#readme","dependencies":{"arrify":"^1.0.1","cache-manager":"^2.9.0","extend":"^3.0.1"},"devDependencies":{"babel-cli":"^6.26.0","babel-preset-es2015":"^6.24.1","cache-manager-redis-store":"^1.4.0","chai":"^3.5.0","commitizen":"^2.9.6","coveralls":"^3.0.1","cz-conventional-changelog":"^2.1.0","eslint":"^4.19.0","eslint-config-airbnb-base":"^12.1.0","eslint-config-prettier":"^2.9.0","eslint-import-resolver-webpack":"^0.9.0","eslint-plugin-import":"^2.11.0","eslint-plugin-mocha":"^4.11.0","eslint-plugin-prettier":"^2.6.0","istanbul":"^0.4.5","mocha":"^5.1.1","mocha-lcov-reporter":"^1.3.0","pre-commit":"^1.2.2","prettier":"^1.12.1","redis-mock":"^0.21.0","require-uncached":"^1.0.3","sinon":"^4.2.0","standard-version":"^4.3.0","yargs":"11.0.0"},"gitHead":"0cea907f2d7be327fccf1c15de49453dd4e0d5b1","_id":"nsql-cache@1.1.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.2","_npmUser":{"name":"sebelga","email":"sabee77@gmail.com"},"dist":{"integrity":"sha512-QRJe7Z3fqUJc57NVTHsxRFXlCEIoLlb0FQMW5NOfWGMDq8Qcz4ampT2wnnvufT+T63uKgqvX4qwTAWMcQ3iuQw==","shasum":"10619d77fd711531a2e25e9992166797e40d39ec","tarball":"https://registry.npmjs.org/nsql-cache/-/nsql-cache-1.1.5.tgz","fileCount":18,"unpackedSize":6627951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdseY+CRA9TVsSAnZWagAApxgQAJ+B4VmV8OoHH7HopCOV\nvAbod19A1Bts+RPgqw0FbhMTcIDG4EZs8v3nrAEHm1kUfdp9u3tYiPq0e1+C\n+00+eWuniG/EzOJF66SmwaDkbmMWXbR0Py5JO+kWd31sN5CKqWu39TB32pae\nmWoER5CrB9PzGOwEV4jkYBoVvml9H9ZeZ+qumnXLm4J7XeBXkx7gQuY7Gs5y\nIEKa6dSmP6MN7C48eeStzWvaBBQsrFxYxCNeqLugd7PvmzSr+ohbi7Pf46B0\nS1NYWy02h2IbLSSBQvmwrsbaDIzlfAzM7J0gDqJK39zhcN19RyP36uUV4n3x\nO/W7SnT0bSMS4lH1c1uw1z/HjPZc4VvkBdQ0aF9NCLFUxJuB6wZ//z9FvuKl\nJGEYXsSiqh5YyjgRsaFFAKZTQi2kfmPNJg4gRtBw+ytC3L+Rvlr3oL9oxBoB\nj30UTREs7jAfR5dhhmLXHacMBggo/JNunlyENTmNl45J1tVJ4rhZbQhUgILU\nmd2TXRjXOYd9Hzx1nVzJBoyT+L0hrFtEGP2cTGqsKrdqP2lwFzXgsEmQB2ya\nGKF7A4BMefiX/CxPErcoczTRY0K9IlTYG5ojDJSTujJgpCHbqM6scTeTPyLq\n8+ZqrC/di60jDaNNmS0aATJLR8ihrTFAvFe/dZzdVfAHqwzjHzKRPjiEK5bw\n5F7q\r\n=+U7B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPBrq5/kULt3IX+qXGpiBVucfHGFqleII3poxrM6Z+wAIgQ9/YmY9/mdsfbZm36l+SadNBR2BgiJHV79cQujaj6YM="}]},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nsql-cache_1.1.5_1571939901866_0.0032973971571761407"},"_hasShrinkwrap":false}},"time":{"created":"2018-05-05T09:34:25.452Z","0.0.0":"2018-05-05T09:34:25.519Z","modified":"2022-05-11T21:22:20.166Z","1.0.0":"2018-05-05T15:38:30.914Z","1.0.1":"2018-05-06T15:22:29.193Z","1.1.0":"2018-05-08T05:45:22.742Z","1.1.1":"2018-07-22T16:07:30.037Z","1.1.2":"2018-08-07T05:01:55.755Z","1.1.3":"2018-08-18T15:19:18.206Z","1.1.4":"2018-08-26T12:46:41.478Z","1.1.5":"2019-10-24T17:58:22.169Z"},"maintainers":[{"name":"sebelga","email":"sabee77@gmail.com"}],"description":"Advanced cache layer for NoSQL databases","keywords":["cache","google datastore","gcloud node","google app engine","nodejs"],"license":"MIT","readme":"<!-- README template from\nhttps://raw.githubusercontent.com/dbader/readme-template/master/README.md\n-->\n\n# Nsql Cache [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Advanced%20cache%20layer%20for%20NoSQL%20databases!%20https%3A%2F%2Fgithub.com%2Fsebelga%2Fnsql-cache)\n\n> Advanced Cache Layer for NoSQL databases\n\n[![NPM Version][npm-image]][npm-url]\n[![Build Status][travis-image]][travis-url]\n[![coveralls-image]][coveralls-url]\n\n<img title=\"logo\" src=\"logo/logo.gif\" width=\"85%\" align=\"center\">\n\n[**Installation**](#installation) |\n[**API**](#api) |\n[**Support**](../../issues)\n\nnsql-cache is an advanced cache layer for NoSQL database clients. It is vendor agnostic and currently has the following database adapters:\n\n- [nsql-cache-datastore](https://github.com/sebelga/nsql-cache-datastore) for the Google Datastore\n\n<!-- See the [Medium article](https://medium.com/p/ffb402cd0e1c/edit) for an in-depth overview of this library. -->\n\n## Highlight\n\n* Have **multiple cache stores** with different TTL thanks to [node-cache-manager](https://github.com/BryanDonovan/node-cache-manager).\n* **LRU memory cache** out of the box to speed up your application right away.\n* Advanced cache (when using [node_redis](https://github.com/NodeRedis/node_redis)) that automatically saves the queries in Redis _Sets_ by entity **Kind**. You can then have an **infinite TTL** (time to live) for the queries and their cache is invalidated only when an entity of the same _Kind_ is **added**, **updated** or **deleted**.\n\n> Please don’t forget to star this repo if you found it useful :)\n\n## Installation\n\nTo create a nsql-cache instance, we need to provide a **database adapter**. In the examples here we will use the Google Datastore adapter.\n\n```sh\nnpm install nsql-cache nsql-cache-datastore --save\n# or\nyarn add nsql-cache nsql-cache-datastore\n```\n\n## Create a cache instance\n\n```js\n// ----------------------------\n// Google Datastore example\n// ----------------------------\nconst Datastore = require('@google-cloud/datastore');\nconst NsqlCache = require('nsql-cache');\nconst dsAdapter = require('nsql-cache-datastore');\n\nconst datastore = new Datastore(); // Google Datastore client\nconst db = dsAdapter(datastore); // Nsql database adapter\nconst cache = new NsqlCache({ db }); // Nsql cache instance\n```\n\nGreat! You now have a LRU memory cache with the following configuration:\n\n- Maximum number of objects in cache: 100\n- TTL (time to live) for entities (_Key_ fetch): 10 minutes\n- TTL for queries: 5 second\n\n#### Configuration\n\nTo change the default TTL you can pass a configuration object when creating the cache instance.\n\n```js\nconst cache = new NsqlCache({\n    db,\n    config: {\n        ttl: {\n            keys: 60 * 10, // 10 minutes (default)\n            queries: 5, // 5 seconds (default)\n        }\n    }\n});\n```\n\nFor the complete configuration options, please refer to the [API documentation](#api) below.\n\n### Wrap database client\n\nBy default, _if_ the database adapter supports it, nsql-cache will wrap the database client in order to fully manage the cache for you.  \nIf you don't want the database client to be wrapped, disable it in the configuration.  You are then responsible to manage the cache.  Look at the examples in the [nsql-cache-datastore](https://github.com/sebelga/nsql-cache-datastore#advanced-usage-cache-not-managed) repository to see how to manage the cache yourself.\n\n```js\nconst cache = new NsqlCache({\n    db,\n    config: {\n        ...\n        wrapClient: false,\n    }\n});\n```\n\n### Core concepts\n\nnsql-cache is based on the core concepts of NoSQL database data agregation. As there are no JOIN operation expanding over multiple tables, the only two ways to fetch entities are:\n- by **Key(s)** - the fastest way to retrieve entity(ies) from the database\n- by **Query** - on a single entity _type_. ex: `SELECT * from Posts (type) FILTER type=tech`\n\n\n#### Queries\n\nAs you might have noticed in the default configuration above, queries have a very short TTL (5 seconds). This is because as soon as we create, update or delete an entity, any query that we have cached might be out of sync.  \nDepending on the use cases, 5 seconds might be acceptable or not. Remember that you can always disable the cache or lower the TTL on specific queries. You might also decide that you never want the queries to be cached, in such case set the global TTL value for queries to **-1**. \nBut there is a better way: providing a **_Redis_ client**.\n\n#### Multi cache stores\n\nnsql-cache uses the [node-cache-manager](https://github.com/BryanDonovan/node-cache-manager) library to handle the cache. This means that you can have **multiple cache store** with different TTL on each one. The most interesting one for us is the `cache-manager-redis-store` as it is a Redis client that supports `mget()` and  `mset()` which is what we need for our _batch_ operations (get, save, delete multiple keys).  \n\nFirst, add the dependency to your package.json\n\n```sh\nnpm install cache-manager-redis-store --save\n# or\nyarn add cache-manager-redis-store\n```\n\nThen provide the cache store to the nsql-cache constructor.\n\n```js\n...\nconst redisStore = require('cache-manager-redis-store');\n\nconst cache = new NsqlCache({\n    db,\n    stores: [\n        {\n            store: 'memory',\n            max: 100, // maximum number of obects\n        },\n        {\n            store: redisStore,\n            host: 'localhost', // default value\n            port: 6379, // default value\n            auth_pass: 'xxxx'\n        }\n    ]\n})\n```\n\nWe now have _two_ cache stores with different TTL values in each one.  \n\n- memory store: ttl keys = 5 minutes, ttl queries = 5 seconds\n- redis store: ttl keys = 1 day, ttl queries = **infinite** (0)\n\n> If you only wants the Redis cache, remove the memory store from the array.\n\nInfinite cache for queries? Yes! nsql-cache keeps a reference of each query by Entity _Kind_ in a Redis _**Set**_ so it can **invalidate the cache** when an entity of the same _Kind_ is added, updated or deleted.\n<!-- For more information on this read the [Medium article](https://medium.com/p/ffb402cd0e1c/edit). -->\n\nYou can of course change the default TTL for each store:\n\n```js\n...\n\nconst cache = new NsqlCache({\n    db,\n    stores: [\n        { store: 'memory' },\n        { store: redisStore }\n    ],\n    config: {\n        ttl: {\n            memory: {\n                keys: 60 * 60, // 1 hour\n                queries: 30 // 30 seconds\n            },\n            redis: {\n                keys: 60 * 60 * 48,\n                queries: 60 * 60 * 24\n            },\n        }\n    }\n})\n```\n\n---\n\n## API\n\n### NsqlCache Instantiation\n\n#### `new NsqlCache(options)`\n\n* _options_: An object with the following properties:\n\n    * **db**: a database adapter (the doc will come soon on how to create your own)\n    * **stores**: an Array of _cache-manager_ stores stores (optional)\n    * **config**: an object of configuration (optional)\n\nNote on stores: Each store is an object that will be passed to the `cacheManager.caching()` method. [Read the docs](https://github.com/BryanDonovan/node-cache-manager) to learn more about node cache manager.  \n\n  **Important:** Since version 2.7.0, cache-manager supports `mset()`, `mget()` and `del()` for **multiple keys** batch operation. The store(s) you provide here must support this feature.  \n  At the time of this writting only the \"memory\" store and the \"[node-cache-manager-redis-store](https://github.com/dabroek/node-cache-manager-redis-store)\" support it.  \n  If you provide a store that does not support mset/mget you can still use nsql-cache but you won't be able to set or retrieve multiple keys/queries in batch.\n\n\nThe **config** object has the following properties (showing _default_ values):\n\n```js\nconst config = {\n    ttl: {\n        keys: 60 * 10, // 10 minutes\n        queries: 5, // 5 seconds\n\n        // *only* for multiple store, pass the name of the store\n        // and values for TTL keys/queries\n        memory: {\n            keys: 60 * 10,\n            queries: 5,\n        },\n        redis: {\n            keys: 60 * 60 * 24,\n            queries: 0, // infinite\n        },\n    },\n\n    // prefix for the keys generated for the cache\n    cachePrefix: {\n        keys: 'gck:',\n        queries: 'gcq:',\n    },\n\n    // wrap or not the database client (must be supported by the database adapter)\n    wrapClient: true,\n\n    // hash the stringified cache keys\n    hashCacheKeys: true,\n\n    // global is **only** for client that have been wrapped. It turns \"ON\" the cache globally\n    // If you set it to false, you will need to pass an option object to each\n    // request to activate the cache. --> { cache: true }\n    global: true,\n};\n```\n\n---\n\n### cache.keys\n\n#### `read(key|Array<key> [, options, fetchHandler]])`\n\nHelper that will:\n- check the cache\n- if no entity(ies) are found in the cache, fetch the entity(ies) in the database\n- prime the cache with the entity(ies) data\n\n##### Arguments\n\n* _key_: a entity Key or an Array of entity Keys. If it is an array of keys, only the keys that are **not found in the cache** will be passed to the fetchHandler.\n\n* _options_: an optional object of options.\n\n```js\n{\n    ttl: 900, // custom TTL value\n}\n\n// For multi-stores it can also be an object\n{\n    ttl: {  memory: 300, redis: 3600 }\n}\n```\n\n* _fetchHandler_: an optional function handler to fetch the keys. If it is not provided it will default to the database adapter `getEntity(keys)` method.\n\n```js\nconst { datastore, cache } = require('./db');\n\nconst key = datastore.key(['Company', 'Google']);\n\n/**\n * 1. Basic example (using the default fetch handler)\n */\ncache.keys.read(key)\n    .then(entity => console.log(entity));\n\n/**\n * 2. Example with a custom fetch handler that first gets the key from the Datastore,\n * then runs a query and add the entities from the response to the fetched entity.\n */\nconst fetchHandler = (key) => (\n    datastore.get(key)\n        .then((company) => {\n            // Add the latest Posts of the company.\n            // Don't forget to invalidate the Posts queries cache\n            // when creating new Posts entities!\n            const query = datastore.createQuery('Posts')\n                .filter('companyId', key.id)\n                .limit(10);\n\n            return cache.queries.get(query)\n                .then(response => {\n                    company.posts = response[0];\n\n                    // This is the data that will be saved in the cache\n                    return company;\n                });\n        });\n);\n\n// Pass our custom fetchHandler to the read() method\ncache.keys.read(key, fetchHandler)\n    .then((entity) => {\n        console.log(entity);\n    });\n\n// --> with a custom TTL duration\ncache.keys.read(key, { ttl: 900 }, fetchHandler)\n    .then((entity) => {\n        console.log(entity);\n    });\n```\n\n#### `get(key)`\n\nRetrieve an entity from the cache passing a database Key object\n\n```js\nconst key = datastore.key(['Company', 'Google']);\n\ncache.keys.get(key).then(entity => {\n    console.log(entity);\n});\n```\n\n#### `mget(key [, key2, key3, ...])`\n\nRetrieve multiple entities from the cache.\n\n```js\nconst key1 = datastore.key(['Company', 'Google']);\nconst key2 = datastore.key(['Company', 'Twitter']);\n\ncache.keys.mget(key1, key2).then(entities => {\n    console.log(entities[0]);\n    console.log(entities[1]);\n});\n```\n\n#### `set(key, entity [, options])`\n\nAdd an entity in the cache.\n\n* _options_: an optional object of options.\n\n```js\n{\n    ttl: 900, // custom TTL value\n}\n\n// For multi-stores it can also be an object\n{\n    ttl: {  memory: 300, redis: 3600 }\n}\n```\n\n```js\nconst key = datastore.key(['Company', 'Google']);\n\ndatastore.get(key).then(response => {\n    cache.keys.set(key, response[0]).then(() => {\n        // ....\n    });\n});\n```\n\n#### `mset(key, entity [, key(n), entity(n), options])`\n\nAdd multiple entities in the cache.\n\n* _options_: an optional object of options.\n\n```js\n{\n    ttl: 900, // custom TTL value\n}\n\n// For multi-stores it can also be an object\n{\n    ttl: {  memory: 300, redis: 3600 }\n}\n```\n\n```js\nconst key1 = datastore.key(['Company', 'Google']);\nconst key2 = datastore.key(['Company', 'Twitter']);\n\ndatastore.get([key1, key2]).then(response => {\n    const [entities] = response;\n\n    // warning: the datastore.get() method (passing multiple keys) does not guarantee\n    // the order of the returned entities. You will need to add some logic to sort\n    // the response or use the \"read\" helper above that does it for you.\n\n    cache.keys.mset(key1, entities[0], key2, entities[1], { ttl: 240 }).then(() => ...);\n});\n```\n\n#### `del(key [, key2, key3, ...])`\n\nDelete one or multiple keys from the cache\n\n```js\nconst key1 = datastore.key(['Company', 'Google']);\nconst key2 = datastore.key(['Company', 'Twitter']);\n\n// Single key\ncache.keys.del(key1).then(() => { ... });\n\n// Multiple keys\ncache.keys.del(key1, key2).then(() => { ... });\n```\n\n---\n\n### cache.queries\n\n#### `read(query [, options, fetchHandler])`\n\nHelper that will:\n\n- check the cache\n- if the query is not found in the cache, run the query on the database.\n- prime the cache with the response of the Query.\n\n#### Arguments\n\n* _query_: a database Query object.\n\n* _options_: an optional object of options.\n\n```js\n{\n    ttl: 900, // custom TTL value\n}\n\n// For multi-stores it can also be an object\n{\n    ttl: {  memory: 300, redis: 3600 }\n}\n```\n\n* _fetchHandler_: an optional function handler to fetch the query. If it is not provided it will default to the database adapter `runQuery(query)` method.\n\n```js\nconst { datastore, cache } = require('./db');\n\nconst query = datastore\n    .createQuery('Post')\n    .filter('category', 'tech')\n    .order('updatedOn')\n    .limit(10);\n\n/**\n * 1. Basic example (using the default fetch handler)\n */\ncache.queries.read(query)\n    .then(response => console.log(response[0]));\n\n/**\n * 2. Example with a custom fetch handler.\n */\nconst fetchHandler = (q) => (\n    q.run()\n        .then((response) => {\n            const [entities, meta] = response;\n            // ... do anything with the entities\n\n            // return the complete response (both entities + query meta) to the cache\n            return [entities, meta];\n        });\n);\n\ncache.queries.read(query, fetchHandler)\n    .then((response) => {\n        console.log(response[0]);\n        console.log(response[1].moreResults);\n    });\n```\n\n#### `get(query)`\n\nRetrieve a query from the cache passing a Query object\n\n```js\nconst query = datastore.createQuery('Post').filter('category', 'tech');\n\ncache.queries.get(query).then(response => {\n    console.log(response[0]);\n});\n```\n\n#### `mget(query [, query2, query3, ...])`\n\nRetrieve multiple queries from the cache.\n\n```js\nconst query1 = datastore.createQuery('Post').filter('category', 'tech');\nconst query2 = datastore.createQuery('User').filter('score', '>', 1000);\n\ncache.queries.mget(query1, query2).then(response => {\n    console.log(response[0]); // response from query1\n    console.log(response[1]); // response from query2\n});\n```\n\n#### `set(query, data [, options])`\n\nAdd a query in the cache\n\n* _options_: an optional object of options.\n\n```js\n{\n    ttl: 900, // custom TTL value\n}\n\n// For multi-stores it can also be an object\n{\n    ttl: {  memory: 300, redis: 3600 }\n}\n```\n\n```js\nconst query = datastore.createQuery('Post').filter('category', 'tech');\n\nquery.run().then(response => {\n    cache.queries.set(query, response).then(response => {\n        console.log(response[0]);\n    });\n});\n```\n\n#### `mset(query, data [, query(n), data(n), options])`\n\nAdd multiple queries in the cache.\n\n* _options_: an optional object of options.\n\n```js\n{\n    ttl: 900, // custom TTL value\n}\n\n// For multi-stores it can also be an object\n{\n    ttl: {  memory: 300, redis: 3600 }\n}\n```\n\n```js\nconst query1 = datastore.createQuery('Post').filter('category', 'tech');\nconst query2 = datastore.createQuery('User').filter('score', '>', 1000);\n\nPromise.all([query1.run(), query2.run()])\n    .then(result => {\n        cache.queries.mset(query1, result[0], query2, result[1], { ttl: 900 })\n            .then(() => ...);\n    });\n```\n\n#### `kset(key, value, entityKind|Array<EntityKind> [, options])`\n\n**Important:** this method is only available if you have provided a _Redis_ cache store during initialization.\n\n* _options_: an optional object of options.\n\n```js\n{\n    ttl: 900, // custom TTL value\n}\n```\n\nIf you have a complex data resulting from several queries and targeting one or multiple Entiy Kind, you can cache it and _link_ the Entity Kind(s) to it. Let's see it in an example:\n\n```js\nconst { datastore, cache } = require('./db');\n\n/**\n * Handler to fetch all the data for our Home Page\n */\nconst fetchHomeData = () => {\n    // Check the cache first...\n    cache.get('website:home').then(data => {\n        if (data) {\n            // in cache, great!\n            return data;\n        }\n\n        // Cache not found, query the data\n        const queryPosts = datastore\n            .createQuery('Posts')\n            .filter('category', 'tech')\n            .limit(10)\n            .order('publishedOn', { descending: true });\n\n        const queryTopStories = datastore\n            .createQuery('Posts')\n            .order('score', { descending: true })\n            .limit(3);\n\n        const queryProducts = datastore.createQuery('Products').filter('featured', true);\n\n        return Promise.all([queryPosts.run(), queryTopStories.run(), queryProducts.run()]).then(result => {\n            // Build our data object\n            const homeData = {\n                posts: result[0],\n                topStories: result[1],\n                products: result[2],\n            };\n\n            // We save the result of the 3 queries to the cache (\"website:home\" key)\n            // and link the data to the \"Posts\" and \"Products\" Entity Kinds.\n            // We can now safely keep the cache infinitely until we add/edit or delete a \"Posts\" or a \"Products\".\n            return cache.queries.kset('website:home', homeData, ['Posts', 'Products']);\n        });\n    });\n};\n```\n\n#### `clearQueriesByKind(entityKind|Array<EntityKind>)`\n\nDelete all the queries _linked_ to one or several Entity Kinds.\n\n```js\nconst key = datastore.key(['Posts']);\nconst data = { title: 'My new post', text: 'Body text of the post' };\n\ndatastore.save({ key, data })\n    .then(() => {\n        // Invalidate all the queries linked to \"Posts\" Entity Kinds.\n        cache.queries.clearQueriesByKind(['Posts'])\n            .then(() => {\n                ...\n            });\n    });\n```\n\n#### `del(query [, query2, query3, ...])`\n\nDelete one or multiple queries from the cache\n\n```js\nconst query1 = datastore.createQuery('Post').filter('category', 'tech');\nconst query2 = datastore.createQuery('User').filter('score', '>', 1000);\n\n// Single query\ncache.queries.del(query1).then(() => { ... });\n\n// Multiple queries\ncache.queries.del(query1, query2).then(() => { ... });\n```\n\n---\n\n### \"cache-manager\" methods bindings (get, mget, set, mset, del, reset)\n\nnsql-cache has bindings set to the underlying \"cache-manager\" methods _get_, _mget_, _set_, _mset_, _del_ and _reset_. This allows you to cache any other data. Refer to [the cache-manager documentation](https://github.com/BryanDonovan/node-cache-manager).\n\n```js\nconst { cache } = require('./db');\n\ncache.set('my-key', { data: 123 }).then(() => ...);\n\ncache.get('my-key').then((data) => console.log(data));\n\ncache.mset('my-key1', true, 'my-key2', 123, { ttl: 60 }).then(() => ...);\n\ncache.mget('my-key1', 'my-key2').then((data) => {\n    const [data1, data2] = data;\n});\n\ncache.del(['my-key1', 'my-key2']).then(() => ...);\n\n// Clears the cache\ncache.reset().then(() => ...);\n```\n\n## Development setup\n\nInstall the dependencies and run the tests. gstore-caches lints the code with [eslint](https://eslint.org/) and formats it with [prettier](https://prettier.io/) so make sure you have both pluggins installed in your IDE.\n\n```sh\n# Run the tests\nnpm install\nnpm test\n\n# Coverage\nnpm run coverage\n\n# Format the code (if you don't use the IDE pluggin)\nnpm run prettier\n```\n\n## Release History\n\n* 1.0.0\n    * First Release\n\n## Meta\n\nSébastien Loix – [@sebloix](https://twitter.com/sebloix)\n\nDistributed under the MIT license. See `LICENSE` for more information.\n\n[https://github.com/sebelga](https://github.com/sebelga/)  \n\n## Contributing\n\n1. Fork it (<https://github.com/sebelga/nsql-cache/fork>)\n2. Create your feature branch (`git checkout -b feature/fooBar`)\n3. Commit your changes (`git commit -am 'Add some fooBar'`)\n4. Push to the branch (`git push origin feature/fooBar`)\n5. Rebase your feature branch and squash (`git rebase -i master`)\n6. Create a new Pull Request\n\n<!-- Markdown link & img dfn's -->\n\n[npm-image]: https://img.shields.io/npm/v/nsql-cache.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/nsql-cache\n[travis-image]: https://img.shields.io/travis/sebelga/nsql-cache/master.svg?style=flat-square\n[travis-url]: https://travis-ci.org/sebelga/nsql-cache\n[coveralls-image]: https://img.shields.io/coveralls/github/sebelga/nsql-cache.svg\n[coveralls-url]: https://coveralls.io/github/sebelga/nsql-cache?branch=master\n","readmeFilename":"README.md","homepage":"https://github.com/sebelga/nsql-cache#readme","repository":{"type":"git","url":"git+https://github.com/sebelga/nsql-cache.git"},"author":{"name":"Sébastien Loix"},"bugs":{"url":"https://github.com/sebelga/nsql-cache/issues"}}