@kitstack/nest-powertools
Version:
A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development
45 lines • 2.01 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CacheInterceptor = void 0;
const common_1 = require("@nestjs/common");
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
let CacheInterceptor = class CacheInterceptor {
constructor(options = {}) {
this.options = options;
this.cache = new Map();
this.options = {
ttl: 300000,
...options,
};
}
intercept(context, next) {
const request = context.switchToHttp().getRequest();
const key = this.options.key || `${request.method}:${request.url}`;
const cached = this.cache.get(key);
if (cached && Date.now() < cached.expiry) {
return (0, rxjs_1.of)(cached.data);
}
return next.handle().pipe((0, operators_1.tap)((data) => {
this.cache.set(key, {
data,
expiry: Date.now() + this.options.ttl,
});
}));
}
};
exports.CacheInterceptor = CacheInterceptor;
exports.CacheInterceptor = CacheInterceptor = __decorate([
(0, common_1.Injectable)(),
__metadata("design:paramtypes", [Object])
], CacheInterceptor);
//# sourceMappingURL=cache.interceptor.js.map