{"_id":"@angexxl/nestcache","_rev":"16-0adc177035d2a8e5b244b963c2696391","name":"@angexxl/nestcache","dist-tags":{"latest":"1.1.6"},"versions":{"1.0.4":{"name":"@angexxl/nestcache","version":"1.0.4","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.0.4","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"87bc026482d081afdfd6ad8d779385275c13bc43","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.0.4.tgz","fileCount":35,"integrity":"sha512-wDEcLOxEv9nzQ0hJtAUTv3DMOOHNzqv1i934lII2AxroHswGmQAK7c8V4wz3vPWKCzSA6KzVze91sMefCUDyjQ==","signatures":[{"sig":"MEQCIDEtdPFlMK+e/4l/0X9atsSBMB9Tvw+8m+JyLOOoKz5hAiAqjy1OTZGlfZRQfRtGjeBoeG1/gdjHq0fAF1R5Q9zsHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27084},"type":"module","gitHead":"04f9ed1040a4c0080bd0a730a79b375ebd234ee9","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.0.4_1765226519560_0.6862457810856566","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@angexxl/nestcache","version":"1.0.5","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.0.5","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"949d2ddb823773e229b146787ba135241b9eb631","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.0.5.tgz","fileCount":35,"integrity":"sha512-urC1gEI1KcdLqQa4+nNDw10Hho7UzKMsk3fpUI75qTcZ5PR81cqGw5oUhn2mJDyzpjMuQSto5TQrziPUVeQMkQ==","signatures":[{"sig":"MEQCIDp5p8xl5j9obXOOF2dK6R+oN7v7AuzuDZ5CDW9SjHiqAiAQOyRDWOFY080FbpElzyof66fSEGGwtM0R96JEg2w0oA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27087},"type":"module","gitHead":"04f9ed1040a4c0080bd0a730a79b375ebd234ee9","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.0.5_1765227607314_0.4362537522167773","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@angexxl/nestcache","version":"1.0.6","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.0.6","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"81674d9550c700d0888ba94104d8305a2aa08060","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.0.6.tgz","fileCount":35,"integrity":"sha512-6dDHamMLm6+EoQfu8dsa0LnY3nPljaNjVe4rIpT3nX7S61yRpjxM1Wk6PTIYIjc8UhOVF+XFY3Hs96vZdG7Aww==","signatures":[{"sig":"MEQCIHTVFrWsD8cgZXK5516q8LChfiZiSPUQ0jrKIf86yrVpAiBevVhBZCJNKWNB/dkCgase4LMVGyDVzgQ7EeRhCF9gZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30268},"type":"module","gitHead":"04f9ed1040a4c0080bd0a730a79b375ebd234ee9","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.0.6_1765228143203_0.17933417420494147","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@angexxl/nestcache","version":"1.0.7","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.0.7","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"8564220b0d168df33d375b423e82103b5b088126","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.0.7.tgz","fileCount":35,"integrity":"sha512-UMuW0eTz0lbkoiod2sX3mg87ppnzU3hGBLwk+32hHhfzjs0OJM8+c5qTxff4jW73qv2f6DPQtZeSsZ/i/1S2Rw==","signatures":[{"sig":"MEUCIQCDjYjcazFWCqCaKu7UcR+AxhllWS+PGI2Qvd/INzPvBAIgScnzhZExRol69gWzVVXTlWLwloEyKbkHj5aGg9B91Jc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30268},"type":"module","gitHead":"04f9ed1040a4c0080bd0a730a79b375ebd234ee9","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.0.7_1765228402564_0.0274311334416808","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@angexxl/nestcache","version":"1.1.0","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.1.0","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"ba18a7bbfc03e27e98b5846a648d6c31b45b0de0","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.1.0.tgz","fileCount":35,"integrity":"sha512-F28nw6uUeDeXkxb9fn/J7agPCpuPZVWWiT0zxr5xroAGq6E6lTV34Xena8Y6RrIYDXRozHpWN7SdQAF6Ukk5kg==","signatures":[{"sig":"MEQCIA2pWlkXo3IKDGeh95+0lmc3a6vk5l5Dg6O+akCp75CCAiBCddDV1gLxCgzMpa8/PIhwdSPVECIfRx8yvpHwBrXLog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44077},"type":"module","gitHead":"81b10b16ce20015b52535672c6077180ae8971c9","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.1.0_1765232167219_0.009958872970468047","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@angexxl/nestcache","version":"1.1.1","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis","nest","typescript","backend"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.1.1","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"0dd7f8132cd39aef3e2bd4ff8ca746105467ab85","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.1.1.tgz","fileCount":35,"integrity":"sha512-P0Vw+A00Llb2ZJXLmhSdDhkf3hs2nEJD0EK8TuizQrC1AnuOOkYotEaYqtiunP/YOLfirAouRKyZILDQgCYD8A==","signatures":[{"sig":"MEUCIQCmfJKIvc9EtBPy4eFZ98m09j9OxTTQ/MuRdvwSI/rbxAIgFBp2UrIoYOu+Siwt6y1fGrPR3uhEHNMzxStl7XSPzgc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44195},"type":"module","gitHead":"81b10b16ce20015b52535672c6077180ae8971c9","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS. | CLI tool to automatically integrate Redis Cache into NestJS projects.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.1.1_1765232223946_0.8672093148126232","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@angexxl/nestcache","version":"1.1.2","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis","nest","typescript","backend"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.1.2","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"482f81840be794e820483f885c1d213e482e2af6","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.1.2.tgz","fileCount":35,"integrity":"sha512-tXFRyiy99Ov4/crSr6tikb6ijm7L5rtfoxFbBll0lk9NPOyRL/eIAefdVbQZKQY9yTtCoYuZDEEem1fX5HboYQ==","signatures":[{"sig":"MEUCIQCD+EVUsw5+BI2ID03jVUPQMtANAN/nmph4LBvoSOe0+AIgKfnQ+DcGQ8DMWahYi/1WcAaEAxHGQzIO8c+MH/mmtOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44409},"type":"module","gitHead":"5da57143c80d1032606221bfd16c0e2e6fcec689","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS. | CLI tool to automatically integrate Redis Cache into NestJS projects.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.1.2_1765232527365_0.06538088640437545","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@angexxl/nestcache","version":"1.1.3","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis","nest","typescript","backend"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.1.3","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"ee17b8003d3671270a073ead68e6c701ef9a83de","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.1.3.tgz","fileCount":35,"integrity":"sha512-pi8PGWEsY2b++Jhp0fxa5MRQ5W4daQzymt0FuRiGb9GGh+yEF0kMeEFCEENqBcbvhv0P/YXEE2Fgqa7EEM4ioA==","signatures":[{"sig":"MEQCID9jIIaTFvrYbn+erj1jwLH/jdRUmncCbm6yicqCRxsUAiBnazzJ2UUWqi5cGLrhS+G8gm2CvcKcSnjTCG3XDZFjDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44426},"type":"module","gitHead":"5da57143c80d1032606221bfd16c0e2e6fcec689","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS. | CLI tool to automatically integrate Redis Cache into NestJS projects.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.1.3_1765232663927_0.47577296014695114","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@angexxl/nestcache","version":"1.1.4","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis","nest","typescript","backend"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.1.4","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"3c6772728e74430f42336306f5b8228364712d58","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.1.4.tgz","fileCount":35,"integrity":"sha512-CEQS6C6y8nLZVp9bA5aR6ksvhwJBOW7mgfIVu7xtdx3iDKqGfqVBpX+EUsXoJmQOELiT1xJ1sQefOgD2Xrf+3w==","signatures":[{"sig":"MEQCIEZhPhENYtWyw9KMdtOlgJAT7q5RdpvtazkQxW/qmbHKAiBEjr+kWli0aT5f6EKTU6SVEG5/plaEg8odWMiS7ene7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35599},"type":"module","gitHead":"5da57143c80d1032606221bfd16c0e2e6fcec689","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS. | CLI tool to automatically integrate Redis Cache into NestJS projects.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.1.4_1765235271836_0.6121143888938063","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@angexxl/nestcache","version":"1.1.5","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis","nest","typescript","backend"],"author":{"name":"Angel"},"license":"MIT","_id":"@angexxl/nestcache@1.1.5","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"homepage":"https://github.com/AngelSt7/nestcache#readme","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"bin":{"nestcache":"index.js"},"dist":{"shasum":"25d25785f7e7c0f42365391e0f4251090e99f6f4","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.1.5.tgz","fileCount":35,"integrity":"sha512-BxlbKB9Q6BYKabgoh+UbrsJFfw4swujYPMzDKlSBCKXxDxe7Q4bBajDw5nQxRhS/1/xR0Bm7qFzaQRF5Oa+yYg==","signatures":[{"sig":"MEYCIQCMojHjzSeRcPlW235OaKCzdbfVFiUtA8LExU5MKOKZBAIhAPEvhQPISRtQSE8tP0ULeU0kA67bp5ybBCnp1qYzCulm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35584},"type":"module","gitHead":"5da57143c80d1032606221bfd16c0e2e6fcec689","_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"repository":{"url":"git+https://github.com/AngelSt7/nestcache.git","type":"git"},"_npmVersion":"10.9.3","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS. | CLI tool to automatically integrate Redis Cache into NestJS projects.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ioredis":"^5.8.2","@inquirer/prompts":"^8.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nestcache_1.1.5_1765239028631_0.16055014014495206","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@angexxl/nestcache","version":"1.1.6","description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS. | CLI tool to automatically integrate Redis Cache into NestJS projects.","bin":{"nestcache":"index.js"},"type":"module","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis","nest","typescript","backend"],"author":{"name":"Angel"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/AngelSt7/nestcache.git"},"dependencies":{"@inquirer/prompts":"^8.0.1","ioredis":"^5.8.2"},"_id":"@angexxl/nestcache@1.1.6","gitHead":"5da57143c80d1032606221bfd16c0e2e6fcec689","bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"homepage":"https://github.com/AngelSt7/nestcache#readme","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-VcGyJztpWwdZPgrXuBU5U9DGAVmCUm4gTrsWh6j/KhLRo50g4Ll6jLIYw9CbyGrW6uOnsc828uTue1tghXch1g==","shasum":"94329de10265ec3a67c9b5d55446940e2f786d8f","tarball":"https://registry.npmjs.org/@angexxl/nestcache/-/nestcache-1.1.6.tgz","fileCount":35,"unpackedSize":35837,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC+hX/i3VaKaqDOs2cGJRksF31FKyIIhuOi0n+Ucmmi1AiBhYk8//HjAMk/KIf9B6XKws+XylxVIUCXOM1YoeysWCg=="}]},"_npmUser":{"name":"angexxl","email":"santacruza2000@gmail.com"},"directories":{},"maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestcache_1.1.6_1765240638191_0.3569241676813406"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-08T20:41:59.465Z","modified":"2025-12-09T00:37:18.531Z","1.0.0":"2025-12-07T21:42:32.796Z","1.0.1":"2025-12-07T21:49:01.039Z","1.0.2":"2025-12-07T21:56:27.799Z","1.0.3":"2025-12-08T00:22:00.342Z","1.0.4":"2025-12-08T20:41:59.712Z","1.0.5":"2025-12-08T21:00:07.453Z","1.0.6":"2025-12-08T21:09:03.350Z","1.0.7":"2025-12-08T21:13:22.729Z","1.1.0":"2025-12-08T22:16:07.408Z","1.1.1":"2025-12-08T22:17:04.133Z","1.1.2":"2025-12-08T22:22:07.507Z","1.1.3":"2025-12-08T22:24:24.083Z","1.1.4":"2025-12-08T23:07:52.013Z","1.1.5":"2025-12-09T00:10:28.760Z","1.1.6":"2025-12-09T00:37:18.333Z"},"bugs":{"url":"https://github.com/AngelSt7/nestcache/issues"},"author":{"name":"Angel"},"license":"MIT","homepage":"https://github.com/AngelSt7/nestcache#readme","keywords":["nestjs","redis","cache","cli","generator","docker","ioredis","nest","typescript","backend"],"repository":{"type":"git","url":"git+https://github.com/AngelSt7/nestcache.git"},"description":"CLI para integrar Redis Cache automáticamente en proyectos NestJS. | CLI tool to automatically integrate Redis Cache into NestJS projects.","maintainers":[{"name":"angexxl","email":"santacruza2000@gmail.com"}],"readme":"# Welcome to @angexxl/nestcache!\n\nThis is my second npm package, and it comes to drastically improve what was my first attempt at creating a useful CLI for developers.\n\n`@angexxl/nestcache` was born from a real pain point: integrating a cache system with Redis in NestJS can be more tedious than it should be.\n\nBut as usually happens in development…\n\n> \"Nothing is difficult until someone finally simplifies it.\"\n\nBut let's stop the chatter and get to the ***important*** stuff.\n\n---\n\n## 📦 Installation\n\nTo install this package, simply run:\n```bash\nnpx @angexxl/nestcache\n```\n\n---\n## 📦 Implementation\n\nAdd the `CacheModule` in the `AppModule`. This is global, so by registering it here, it will be shared across the entire application:\n\n```typescript\n@Module({\n  imports: [\n    CacheModule\n  ]\n})\nexport class AppModule {}\n```\n---\n\n## 📖 Basic Usage\n\nTo use this package we simply use:\n```typescript\n@Cached(CACHE_KEYS.CARS)\n```\n\n### How does it work?\n\nIn the `cached.decorator.ts` file, it receives a base key that you'll define in the module configuration file called `cache-keys.ts`. There you can generate all the keys you need, for example:\n```typescript\nexport enum CACHE_KEYS {\n    PROPERTIES_ME = 'properties-me',  // for one's properties\n    PROPERTIES = \"properties\"         // for all in general\n    // Add your own keys!\n}\n```\n\n### ⏱️ Predefined TTLs\n\nLikewise, it has TTLs so you don't have to manually write the times in the `ttls.ts` file:\n```typescript\nexport const TTL = {\n  ONE_MINUTE: 60,\n  FIVE_MINUTES: 60 * 5,\n  ONE_HOUR: 60 * 60,\n  ONE_DAY: 60 * 60 * 24,\n  ONE_WEEK: 60 * 60 * 24 * 7,\n  ONE_MONTH: 60 * 60 * 24 * 30,\n  ONE_YEAR: 60 * 60 * 24 * 365\n};\n```\n\nThey must be defined in that file, which will give you absolute flexibility.\n\n---\n\n## 🔑 Cache Key Generation\n\nWe implement the `NestInterceptor` interceptor in `QueryAwareCacheInterceptor` to format cache keys.\n\n### What formatting is achieved?\n\nIn our interceptor we consume `CacheUtilsService` which has a sorting method:\n```typescript\ngenerateCacheKey(base: CACHE_KEYS, query: Record<string, any>, resourceId?: string) {\n    const sortedEntries = Object.entries(query)\n        .filter(([_, v]) => v !== undefined && v !== null)\n        .sort(([a], [b]) => a.localeCompare(b));\n    \n    const queryString = sortedEntries\n        .map(([k, v]) => `${k.toLowerCase()}=${String(v).toLowerCase()}`)\n        .join('&');\n    \n    const idPart = resourceId ? `/${resourceId}` : '';\n    const key = `cache::${base}${idPart}${queryString ? ':' + queryString : ''}`;\n    return key;\n}\n```\n\nSo you won't have to worry about sorting filters to get a safe, clean and ordered key. Likewise, it's capable of prioritizing an ID or whatever you send as a dynamic param.\n\n### Final format of cache keys:\n```\ncache::<base>/<resourceId>:<queryString>\n```\n\nOr simply:\n```\ncache::<base>:<queryString>\n```\n\nDepending on the case. And don't worry! It supports more than one param, so there are no problems.\n\nFinally, it checks if the cache exists. If it exists, we return it and that's it. Remember that in case of non-existence, the decorator will take care of caching it by itself through the observable tap.\n\n---\n\n## 👤 Manual Cache per User\n\nNow, this is perfect for a public search engine, right? But how do we cache for each user? And to cache user info?\n\nTo cache, in this case the user's properties, we'll apply manual cache.\n\n### Injecting the services:\n```typescript\nprivate readonly redisCacheService: RedisCacheService\nprivate readonly cacheUtilsService: CacheUtilsService\n```\n\n### Generating the cache key\n\nWe activate the manual management service where we now have control:\n```typescript\nconst cacheKey = this.cacheUtilsService.generateCacheKey(\n    CACHE_KEYS.PROPERTIES, \n    {}, \n    uuid()\n);\n```\n\nRemember that `generateCacheKey` receives:\n- Your base\n- Your params as an object (in this case, `{}`)\n- The identifier you want, in my case a uuid\n\nThis way, by always positionally prioritizing the third argument, we get a key:\n```\ncache::<your_base_key>/<their_user_ID>:<yourParams>\n```\n\nYou understand? It's great! Feel free to organize it as much as you want because all the code will be downloaded for you.\n\n### Getting the cache\n\nBut, if that's how we create the cache key..., what's next?\n\nWell, in the following service we get it:\n```typescript\nconst cache = await this.redisCacheService.get(cacheKey);\n```\n\nThis already gives it to us as JSON, so by applying:\n```typescript\nif (cache) {\n    return cache;\n}\n```\n\nAnd it's ready!\n\n### Setting the cache\n\nBut what if there's no cache? Well:\n```typescript\nawait this.redisCacheService.set(\n    cacheKey, \n    { message: 'Hello world' }, \n    TTL.FIVE_MINUTES\n);\n```\n\nWhere:\n- The first argument: the cacheKey\n- The second: the object to save\n- The third: the TTL you want\n\nTake it from your TTLs and remember you can expand it as much as you want.\n\nRemember that this logic is for whatever you need. With this you can generate cache for each user, always remembering that the third argument of the cachekey is prioritized in case of existence.\n\n---\n\n## 🗑️ Deleting Cache Keys\n\n### Delete by pattern\n\nBut now, how do we delete a key?\n```typescript\nawait this.redisCacheService.deleteKeys([\n    CACHE_KEYS.CARS\n]);\n```\n\nSimple, consuming `redisCacheService` (the manual manager), we pass the keys however we want since it will iterate over the format:\n```typescript\nasync deleteKeys(keys: string[]) {\n    for (const base of keys) {\n        const pattern = `cache::${base}*`;\n        const keys = await this.redisService.keys(pattern);\n        if (keys.length > 0) {\n            await this.redisService.del(...keys);\n        }\n    }\n}\n```\n\n### Delete cache for a specific user\n\nBut what if I want to delete a user's cache?\n\nEasy:\n```typescript\n`${CACHE_KEYS.CARS}/<yourUniqueIdentifier>`\n```\n\n### Delete multiple keys\n\nWant to delete several? No problem, send it an array and that's it:\n```typescript\nawait this.redisCacheService.deleteKeys([\n    CACHE_KEYS.CARS, \n    `${CACHE_KEYS.CARS}/<yourUniqueIdentifier>`\n]);\n```\n\n---\n\n## 🛠️ CLI Flags\n\nBut, are you still having complications? Don't worry, check out all the visualization options.\n\n| Flag | Description | Example |\n|------|-------------|---------|\n| `--list` | List all keys in Redis | `npx @angexxl/nestcache --list --port 12000` |\n| `--get` | Get a specific cache | `npx @angexxl/nestcache --get cache::properties-me --port 12000` |\n| `--del` | Delete a specific cache | `npx @angexxl/nestcache --del cache::properties-me --port 12000` |\n| `--flush` | Delete all caches | `npx @angexxl/nestcache --flush --port 12000` |\n\n**ALWAYS remember to pass the port where you initially configured it.**\n\n---\n\n## 🐳 Docker Configuration\n\nWe manage with Docker. We'll always generate and add (if applicable) this fragment:\n```yaml\nredis:\n  container_name: redis\n  image: redis:8\n  restart: always\n  ports:\n    - 12000:6379\n  volumes:\n    - ${PWD}/redis:/data\n```\n\nRemember to run it with `docker compose up -d` and have Docker open.\n\n---\n\n## ⚠️ Possible Issues\n\n### Port error\n\nPort error? Change it post instantiation.\n\nThe files to modify are:\n- `redis.service.ts`\n- The port in Docker\n\n#### In `redis.service.ts`:\n```typescript\nconstructor() {\n  super({\n    host: 'localhost',\n    port: 12000, // Change this value\n  });\n}\n```\n\n#### In the Docker file:\n```yaml\nports:\n  - <your_port>:6379\n```\n\n---\n\n## 💡 Usage Examples\n\n### Automatic cache\n\nHere we cache automatically:\n```typescript\n@Get()\n@Cached(CACHE_KEYS.CARS, TTL.FIVE_MINUTES)\nfindAll(@Query() query: PaginationCarsDto) {\n  return this.carsService.findAll(query);\n}\n```\n\n### Manual cache\n\nIn this quick example we cache manually. You can apply it wherever you want, I put it here out of laziness hahahaha, but it's the logic:\n```typescript\n@Post('/test')\nasync test() {\n  // To generate cache key\n  const cacheKey = this.cacheUtilsService.generateCacheKey(\n    CACHE_KEYS.USER, \n    {}, \n    uuid()\n  );\n  \n  // To get\n  const cache = await this.redisCacheService.get(cacheKey);\n  if (cache) {\n    return cache;\n  }\n  \n  // To set the cache\n  await this.redisCacheService.set(\n    cacheKey, \n    { message: 'Hello world' }, \n    TTL.FIVE_MINUTES\n  );\n  \n  return { message: 'Hello world' };\n}\n```\n\nThis way is ideal for getting a user's objects, as well as a logged-in user's info.\n\n**Remember you're free to modify the code.**\n\n---\n\n## 📞 Contact\n\nIf you have any suggestions you can send me a direct message to:\n\n- **Email:** santacruza2000@gmail.com\n- **WhatsApp:** +51 960 856 003\n\nI hope you liked my work. Don't hesitate to report any bug or anything that fails.\n\n**Enjoy this!** 🎉","readmeFilename":"README.md"}