feathers-hooks-rediscache
Version:
Cache any route with redis
2 lines • 7.31 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("library",[],t):"object"==typeof exports?exports.library=t():e.library=t()}(global,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=11)}([function(e,t){e.exports=require("chalk")},function(e,t){e.exports=require("qs")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parsePath=function(e,t={removePathFromCacheKey:!1,parseNestedRoutes:!1}){const r=e.params.query||{},n=t.removePathFromCacheKey,s=t.parseNestedRoutes;let a=n&&e.id?"":`${e.path}`;!n&&s&&(a=function(e,t){const r=new RegExp(":([^\\/\\?]+)\\??","g");let n=null;for(;null!==(n=r.exec(e));)Object.keys(t.route).includes(n[1])&&(e=e.replace(n[0],t.route[n[1]]));return e}(a,e.params));e.id?(0===a.length||n||(a+="/"),Object.keys(r).length>0?a+=`${e.id}?${o.default.stringify(r,{encode:!1})}`:a+=`${e.id}`):Object.keys(r).length>0&&(a+=`?${o.default.stringify(r,{encode:!1})}`);return a};var n,o=(n=r(1))&&n.__esModule?n:{default:n}},function(e,t){e.exports=require("moment")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.before=function(e){return function(t){const r=t.app.get("redisCache");return e=Object.assign({},u,r,e),new Promise(r=>{const a=t.app.get("redisClient");a||r(t);const u=(0,s.parsePath)(t,e);a.get(u,(s,a)=>{if(null!==s&&r(t),a){let s=JSON.parse(a);const c=(0,n.default)(s.cache.expiresOn).format("DD MMMM YYYY - HH:mm:ss");t.result=s,r(t),"test"!==e.env&&(console.log(`${o.default.cyan("[redis]")} returning cached value for ${o.default.green(u)}.`),console.log(`> Expires on ${c}.`))}else!0===e.immediateCacheKey&&(t.params.cacheKey=u),r(t)})})}},t.after=function(e){return function(t){const r=t.app.get("redisCache");return e=Object.assign({},u,r,e),new Promise(r=>{if(!t.result.cache.cached){const a=t.result.cache.duration||e.defaultDuration,u=t.app.get("redisClient");u||r(t);const c=t.params.cacheKey||(0,s.parsePath)(t,e);Object.assign(t.result.cache,{cached:!0,duration:a,expiresOn:(0,n.default)().add(n.default.duration(a,"seconds")),parent:t.path,group:t.path?`group-${t.path}`:"",key:c}),u.set(c,JSON.stringify(t.result)),u.expire(c,t.result.cache.duration),t.path&&u.rpush(t.result.cache.group,c),"test"!==e.env&&(console.log(`${o.default.cyan("[redis]")} added ${o.default.green(c)} to the cache.`),console.log(`> Expires in ${n.default.duration(a,"seconds").humanize()}.`))}if(t.result.cache.hasOwnProperty("wrapped")){const{wrapped:e}=t.result.cache;t.result=e}r(t)})}};var n=a(r(3)),o=a(r(0)),s=r(2);function a(e){return e&&e.__esModule?e:{default:e}}const u={env:"production",defaultDuration:86400,immediateCacheKey:!1}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.cache=function(e){return function(t){const r=t.app.get("redisCache");if(e=Object.assign({},n,r,e),!t.result.hasOwnProperty("cache")){let r={};if(Array.isArray(t.result)){const e=t.result;r.wrapped=e,t.result={}}r=Object.assign({},r,{cached:!1,duration:e.duration||e.defaultDuration}),t.result.cache=r}return Promise.resolve(t)}},t.removeCacheInformation=function(e){return function(e){return e.result.hasOwnProperty("cache")&&delete e.result.cache,Promise.resolve(e)}};const n={defaultDuration:86400}},function(e,t){e.exports=require("redis")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){const e=this,t=e.get("redisCache")||{},r=t.retryInterval||1e4,s=Object.assign({},this.get("redis"),{retry_strategy:function(n){return e.set("redisClient",void 0),"test"!==t.env&&console.log(`${o.default.yellow("[redis]")} not connected`),r}}),a=n.default.createClient(s);return e.set("redisClient",a),a.on("ready",()=>{e.set("redisClient",a),"test"!==t.env&&console.log(`${o.default.green("[redis]")} connected`)}),this};var n=s(r(6)),o=s(r(0));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=class{constructor(e){this.client=e}clearSingle(e){return new Promise((t,r)=>{this.client.del(`${e}`,(e,n)=>{e&&r(!1),1===n&&t(!0),t(!1)})})}clearGroup(e){return new Promise((t,r)=>{this.client.lrange(e,0,-1,(n,o)=>{n&&r(n),this.clearAll(o).then(this.client.del(e,(e,r)=>{t(1===r)}))})})}clearAll(e){return new Promise(t=>{e.length||t(!1);let r=0;for(;r<e.length;r++)this.clearSingle(e[r]).then(n=>{r===e.length-1&&t(n)})})}},e.exports=t.default},function(e,t){e.exports=require("express")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=s(r(9)),o=s(r(8));function s(e){return e&&e.__esModule?e:{default:e}}const a=200,u=204,c=500,l=404;var i=function(e){const t=n.default.Router(),r=e.get("redisClient"),s=new o.default(r);return t.get("/clear",(e,t)=>{r.flushall("ASYNC",()=>{t.status(a).json({message:"Cache cleared",status:a})})}),t.get("/clear/single/*",(e,t)=>{let n=decodeURIComponent(e.params[0]);const o=e.query,i=o&&0!==Object.keys(o).length;n.length?(i&&(n=decodeURIComponent(e.url.split("/").slice(3).join("/"))),r.get(`${n}`,(e,r)=>{e?t.status(c).json({message:"something went wrong"+e.message}):r?s.clearSingle(n).then(e=>{t.status(a).json({message:`cache cleared for key (${i?"with":"without"} params): ${n}`,status:a})}):t.status(a).json({message:`cache already cleared for key (${i?"with":"without"} params): ${n}`,status:u})})):t.status(l).end()}),t.get("/clear/group/*",(e,t)=>{let n=decodeURIComponent(e.params[0]);n.length?(n="group-"+n,r.lrange(n,0,-1,(r,o)=>{r?t.status(c).json({message:"something went wrong"+r.message}):o&&Array.isArray(o)&&o.length>0?s.clearGroup(n).then(r=>{t.status(a).json({message:`cache cleared for the group key: ${decodeURIComponent(e.params[0])}`,status:a})}):t.status(a).json({message:`cache already cleared for the group key: ${decodeURIComponent(e.params[0])}`,status:u})})):t.status(l).end()}),t};t.default=i,e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=u(r(10)),o=u(r(7)),s=r(5),a=r(4);function u(e){return e&&e.__esModule?e:{default:e}}var c={redisClient:o.default,cacheRoutes:n.default,hookCache:s.cache,hookRemoveCacheInformation:s.removeCacheInformation,redisBeforeHook:a.before,redisAfterHook:a.after};t.default=c,e.exports=t.default}])});
//# sourceMappingURL=library.min.js.map