mormati-redis 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export { RedisModule } from './modules/redis/redis.module';
2
2
  export { RedisConnection } from './modules/redis/redis.connection';
3
3
  export { RedisService } from './modules/redis/redis.service';
4
4
  export { IRedisModuleAsyncOptions } from './modules/redis/redis.type';
5
+ export * from './modules/cache';
5
6
  export { REDIS_CONFIG_SERVICE } from './const';
package/dist/index.js CHANGED
@@ -1,4 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  exports.REDIS_CONFIG_SERVICE = exports.RedisService = exports.RedisConnection = exports.RedisModule = void 0;
4
18
  var redis_module_1 = require("./modules/redis/redis.module");
@@ -7,6 +21,7 @@ var redis_connection_1 = require("./modules/redis/redis.connection");
7
21
  Object.defineProperty(exports, "RedisConnection", { enumerable: true, get: function () { return redis_connection_1.RedisConnection; } });
8
22
  var redis_service_1 = require("./modules/redis/redis.service");
9
23
  Object.defineProperty(exports, "RedisService", { enumerable: true, get: function () { return redis_service_1.RedisService; } });
24
+ __exportStar(require("./modules/cache"), exports);
10
25
  var const_1 = require("./const");
11
26
  Object.defineProperty(exports, "REDIS_CONFIG_SERVICE", { enumerable: true, get: function () { return const_1.REDIS_CONFIG_SERVICE; } });
12
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/redis/src/index.ts"],"names":[],"mappings":";;;AAEA,6DAA2D;AAAlD,2GAAA,WAAW,OAAA;AACpB,qEAAmE;AAA1D,mHAAA,eAAe,OAAA;AACxB,+DAA6D;AAApD,6GAAA,YAAY,OAAA;AAIrB,iCAEiB;AADb,6GAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/redis/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,6DAA2D;AAAlD,2GAAA,WAAW,OAAA;AACpB,qEAAmE;AAA1D,mHAAA,eAAe,OAAA;AACxB,+DAA6D;AAApD,6GAAA,YAAY,OAAA;AAGrB,kDAAgC;AAGhC,iCAEiB;AADb,6GAAA,oBAAoB,OAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const CACHE_CONFIG_KEY = "cache:config";
2
+ export declare const CACHE_HASH_PREFIX = "api:cache";
3
+ export declare const CACHE_DEFAULT_TTL = "no-ttl";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CACHE_DEFAULT_TTL = exports.CACHE_HASH_PREFIX = exports.CACHE_CONFIG_KEY = void 0;
4
+ exports.CACHE_CONFIG_KEY = 'cache:config';
5
+ exports.CACHE_HASH_PREFIX = 'api:cache';
6
+ exports.CACHE_DEFAULT_TTL = 'no-ttl';
7
+ //# sourceMappingURL=cache.const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.const.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.const.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,cAAc,CAAC;AAClC,QAAA,iBAAiB,GAAG,WAAW,CAAC;AAChC,QAAA,iBAAiB,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CacheDecoratorOptions } from './cache.type';
2
+ export declare const UseCache: (options: CacheDecoratorOptions) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UseCache = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const cache_const_1 = require("./cache.const");
6
+ const UseCache = (options) => (0, common_1.SetMetadata)(cache_const_1.CACHE_CONFIG_KEY, options);
7
+ exports.UseCache = UseCache;
8
+ //# sourceMappingURL=cache.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.decorator.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAC7C,+CAAiD;AAa1C,MAAM,QAAQ,GAAG,CAAC,OAA8B,EAAE,EAAE,CACzD,IAAA,oBAAW,EAAC,8BAAgB,EAAE,OAAO,CAAC,CAAC;AAD5B,QAAA,QAAQ,YACoB"}
@@ -0,0 +1,11 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { Observable } from 'rxjs';
4
+ import { CacheService } from './cache.service';
5
+ export declare class CacheInterceptor implements NestInterceptor {
6
+ private readonly reflector;
7
+ private readonly cacheService;
8
+ constructor(reflector: Reflector, cacheService: CacheService);
9
+ intercept(context: ExecutionContext, next: CallHandler): Promise<Observable<any>>;
10
+ private setCacheHeader;
11
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CacheInterceptor = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const rxjs_1 = require("rxjs");
16
+ const operators_1 = require("rxjs/operators");
17
+ const cache_service_1 = require("./cache.service");
18
+ const cache_const_1 = require("./cache.const");
19
+ let CacheInterceptor = class CacheInterceptor {
20
+ constructor(reflector, cacheService) {
21
+ this.reflector = reflector;
22
+ this.cacheService = cacheService;
23
+ }
24
+ async intercept(context, next) {
25
+ const cacheConfig = this.reflector.get(cache_const_1.CACHE_CONFIG_KEY, context.getHandler());
26
+ if (!cacheConfig)
27
+ return next.handle();
28
+ const { service, module, ttl = cache_const_1.CACHE_DEFAULT_TTL } = cacheConfig;
29
+ const request = context.switchToHttp().getRequest();
30
+ const response = context.switchToHttp().getResponse();
31
+ const method = request.method || "";
32
+ const url = request.url || "";
33
+ const headers = request.headers || {};
34
+ const language = headers['accept-language'] || "en";
35
+ const cache = headers['cache'] || "";
36
+ const query = request.query || {};
37
+ const body = request.body || {};
38
+ if (cache == 'no-cache')
39
+ return next.handle();
40
+ const cacheKey = this.cacheService.generateCacheKey({
41
+ service,
42
+ module,
43
+ method,
44
+ url,
45
+ language,
46
+ query,
47
+ body,
48
+ });
49
+ const cacheResult = await this.cacheService.getCacheWithMetadata(cacheKey);
50
+ if (cacheResult && cache != "revalidate-cache") {
51
+ const { data, cachedAt, ttl } = cacheResult;
52
+ this.setCacheHeader(response, { type: 'HIT', ttl });
53
+ return (0, rxjs_1.of)(data);
54
+ }
55
+ this.setCacheHeader(response, { type: 'MISS', ttl });
56
+ return next.handle().pipe((0, operators_1.tap)(async (responseData) => {
57
+ const metaData = {
58
+ ttl,
59
+ cachedAt: Date.now(),
60
+ };
61
+ await this.cacheService.setCacheWithMetadata(cacheKey, responseData, metaData);
62
+ }));
63
+ }
64
+ setCacheHeader(response, options) {
65
+ const { type, ttl } = options;
66
+ response.setHeader('X-Cache', type);
67
+ response.setHeader('X-Cache-Expires-In', ttl.toString());
68
+ }
69
+ };
70
+ exports.CacheInterceptor = CacheInterceptor;
71
+ exports.CacheInterceptor = CacheInterceptor = __decorate([
72
+ (0, common_1.Injectable)(),
73
+ __metadata("design:paramtypes", [core_1.Reflector,
74
+ cache_service_1.CacheService])
75
+ ], CacheInterceptor);
76
+ //# sourceMappingURL=cache.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.interceptor.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.interceptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare class CacheModule {
2
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CacheModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const core_1 = require("@nestjs/core");
12
+ const cache_service_1 = require("./cache.service");
13
+ const cache_interceptor_1 = require("./cache.interceptor");
14
+ let CacheModule = class CacheModule {
15
+ };
16
+ exports.CacheModule = CacheModule;
17
+ exports.CacheModule = CacheModule = __decorate([
18
+ (0, common_1.Module)({
19
+ imports: [],
20
+ controllers: [],
21
+ providers: [
22
+ cache_service_1.CacheService,
23
+ {
24
+ provide: core_1.APP_INTERCEPTOR,
25
+ useClass: cache_interceptor_1.CacheInterceptor,
26
+ },
27
+ ],
28
+ })
29
+ ], CacheModule);
30
+ //# sourceMappingURL=cache.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.module.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uCAA+C;AAC/C,mDAA+C;AAC/C,2DAAuD;AAahD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAI,CAAA;AAAf,kCAAW;sBAAX,WAAW;IAXvB,IAAA,eAAM,EAAC;QACJ,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;QACf,SAAS,EAAE;YACP,4BAAY;YACZ;gBACI,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,oCAAgB;aAC7B;SACJ;KACJ,CAAC;GACW,WAAW,CAAI"}
@@ -0,0 +1,19 @@
1
+ import { RedisService } from '../redis/redis.service';
2
+ import { CacheKeyProps, CacheMetadata, CacheResultWithMetadata } from './cache.type';
3
+ export declare class CacheService {
4
+ private readonly redisService;
5
+ private readonly hashPrefix;
6
+ constructor(redisService: RedisService);
7
+ generateCacheKey(props: CacheKeyProps): string;
8
+ setCache<T>(key: string, data: T): Promise<boolean>;
9
+ getCache<T>(key: string): Promise<T | null>;
10
+ getCacheKeys<T>(pattern: string): Promise<{
11
+ totalKeys: number;
12
+ keys: string[];
13
+ }>;
14
+ deleteCache(keys: string | string[]): Promise<boolean>;
15
+ deleteAllCacheByPattern(pattern: string): Promise<string[]>;
16
+ deleteAllCache(): Promise<string[]>;
17
+ setCacheWithMetadata<T>(key: string, data: T, metaData: CacheMetadata): Promise<boolean>;
18
+ getCacheWithMetadata<T>(key: string): Promise<CacheResultWithMetadata<T> | null>;
19
+ }
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CacheService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const redis_service_1 = require("../redis/redis.service");
15
+ const cache_utils_1 = require("./cache.utils");
16
+ const cache_const_1 = require("./cache.const");
17
+ let CacheService = class CacheService {
18
+ constructor(redisService) {
19
+ this.redisService = redisService;
20
+ this.hashPrefix = cache_const_1.CACHE_HASH_PREFIX;
21
+ }
22
+ generateCacheKey(props) {
23
+ try {
24
+ const { service, module, method, url, language, query, body, } = props;
25
+ const hashs = [this.hashPrefix, service, module];
26
+ if (method)
27
+ hashs.push(method);
28
+ if (url)
29
+ hashs.push(url);
30
+ if (language)
31
+ hashs.push(language);
32
+ if (query && Object.keys(query).length > 0) {
33
+ const queryHash = (0, cache_utils_1.hashObject)(query);
34
+ hashs.push(queryHash);
35
+ }
36
+ if (body && Object.keys(body).length > 0) {
37
+ const bodyHash = (0, cache_utils_1.hashObject)(body);
38
+ hashs.push(bodyHash);
39
+ }
40
+ return hashs.join(':');
41
+ }
42
+ catch (error) {
43
+ console.log("## Error: 'generateCacheKey' in CacheService", error);
44
+ }
45
+ }
46
+ async setCache(key, data) {
47
+ try {
48
+ const serialized = JSON.stringify(data);
49
+ await this.redisService.set(key, serialized);
50
+ return true;
51
+ }
52
+ catch (error) {
53
+ console.log("## Error: 'setCache' in CacheService", error);
54
+ return false;
55
+ }
56
+ }
57
+ async getCache(key) {
58
+ try {
59
+ const cached = await this.redisService.get(key);
60
+ if (!cached)
61
+ return null;
62
+ return JSON.parse(cached);
63
+ }
64
+ catch (error) {
65
+ console.log("## Error: 'getCache' in CacheService", error);
66
+ return null;
67
+ }
68
+ }
69
+ async getCacheKeys(pattern) {
70
+ const result = {
71
+ totalKeys: 0,
72
+ keys: [],
73
+ };
74
+ try {
75
+ const keys = await this.redisService.keys(pattern);
76
+ const totalKeys = keys.length;
77
+ if (totalKeys == 0)
78
+ return result;
79
+ result.keys = keys;
80
+ result.totalKeys = totalKeys;
81
+ return result;
82
+ }
83
+ catch (error) {
84
+ console.log("## Error: 'getCacheKeys' in CacheService", error);
85
+ return result;
86
+ }
87
+ }
88
+ async deleteCache(keys) {
89
+ try {
90
+ const keyArray = Array.isArray(keys) ? keys : [keys];
91
+ if (keyArray.length === 0) {
92
+ return false;
93
+ }
94
+ for (const key of keyArray) {
95
+ await this.redisService.del(key);
96
+ }
97
+ return true;
98
+ }
99
+ catch (error) {
100
+ console.log("## Error: 'deleteCache' in CacheService", error);
101
+ return false;
102
+ }
103
+ }
104
+ async deleteAllCacheByPattern(pattern) {
105
+ try {
106
+ const hashPattern = `${this.hashPrefix}:${pattern}`;
107
+ const response = await this.getCacheKeys(hashPattern);
108
+ await this.deleteCache(response.keys);
109
+ return response.keys;
110
+ }
111
+ catch (error) {
112
+ console.log("## Error: 'deleteAllCacheByPattern' in CacheService", error);
113
+ return [];
114
+ }
115
+ }
116
+ async deleteAllCache() {
117
+ try {
118
+ const hashPattern = `${this.hashPrefix}:*`;
119
+ const response = await this.getCacheKeys(hashPattern);
120
+ await this.deleteCache(response.keys);
121
+ return response.keys;
122
+ }
123
+ catch (error) {
124
+ console.log("## Error: 'deleteAllCache' in CacheService", error);
125
+ return [];
126
+ }
127
+ }
128
+ async setCacheWithMetadata(key, data, metaData) {
129
+ try {
130
+ const dataWithMetaData = {
131
+ data,
132
+ ...metaData
133
+ };
134
+ return await this.setCache(key, dataWithMetaData);
135
+ }
136
+ catch (error) {
137
+ console.log("## Error: 'setCacheWithMetadata' in CacheService", error);
138
+ return false;
139
+ }
140
+ }
141
+ async getCacheWithMetadata(key) {
142
+ try {
143
+ const dataWithMetaData = await this.getCache(key);
144
+ if (!dataWithMetaData)
145
+ return null;
146
+ const { data, ...metadata } = dataWithMetaData;
147
+ const ttl = metadata.ttl;
148
+ if (ttl == 'no-ttl')
149
+ return dataWithMetaData;
150
+ const timeElapsed = Math.floor((Date.now() - metadata.cachedAt) / 1000);
151
+ if (!ttl || timeElapsed > ttl) {
152
+ await this.deleteCache(key);
153
+ return null;
154
+ }
155
+ dataWithMetaData.ttl = Math.max(0, ttl - timeElapsed);
156
+ return dataWithMetaData;
157
+ }
158
+ catch (error) {
159
+ console.log("## Error: 'getCacheWithMetadata' in CacheService", error);
160
+ return null;
161
+ }
162
+ }
163
+ };
164
+ exports.CacheService = CacheService;
165
+ exports.CacheService = CacheService = __decorate([
166
+ (0, common_1.Injectable)(),
167
+ __metadata("design:paramtypes", [redis_service_1.RedisService])
168
+ ], CacheService);
169
+ //# sourceMappingURL=cache.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface CacheDecoratorOptions {
2
+ service: string;
3
+ module: string;
4
+ ttl?: number | 'no-ttl';
5
+ }
6
+ export interface CacheKeyProps {
7
+ service: string;
8
+ module: string;
9
+ method: string;
10
+ url: string;
11
+ language: string;
12
+ query?: Record<string, any>;
13
+ body?: Record<string, any>;
14
+ }
15
+ export interface CacheMetadata {
16
+ cachedAt: number;
17
+ ttl: number | 'no-ttl';
18
+ }
19
+ export interface CacheResultWithMetadata<T = any> extends CacheMetadata {
20
+ data: T;
21
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=cache.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.type.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare const hashObject: (obj: Record<string, any>) => string;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hashObject = void 0;
4
+ const hashObject = (obj) => {
5
+ const sortedKeys = Object.keys(obj).sort();
6
+ const parts = sortedKeys.map(key => `${key}=${JSON.stringify(obj[key])}`);
7
+ const str = parts.join('&');
8
+ let hash = 0;
9
+ for (let i = 0; i < str.length; i++) {
10
+ const char = str.charCodeAt(i);
11
+ hash = ((hash << 5) - hash) + char;
12
+ hash = hash & hash;
13
+ }
14
+ return Math.abs(hash).toString(36);
15
+ };
16
+ exports.hashObject = hashObject;
17
+ //# sourceMappingURL=cache.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.utils.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.utils.ts"],"names":[],"mappings":";;;AAGO,MAAM,UAAU,GAAG,CAAC,GAAwB,EAAU,EAAE;IAE3D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAG5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACnC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,CAAC,CAAA;AAfY,QAAA,UAAU,cAetB"}
@@ -0,0 +1,7 @@
1
+ export * from './cache.module';
2
+ export * from './cache.service';
3
+ export * from './cache.decorator';
4
+ export * from './cache.interceptor';
5
+ export * from './cache.utils';
6
+ export * from './cache.const';
7
+ export * from './cache.type';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./cache.module"), exports);
18
+ __exportStar(require("./cache.service"), exports);
19
+ __exportStar(require("./cache.decorator"), exports);
20
+ __exportStar(require("./cache.interceptor"), exports);
21
+ __exportStar(require("./cache.utils"), exports);
22
+ __exportStar(require("./cache.const"), exports);
23
+ __exportStar(require("./cache.type"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,kDAAgC;AAChC,oDAAkC;AAClC,sDAAoC;AACpC,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B"}