@nest-omni/core 4.1.3-19 → 4.1.3-20
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/cache/cache.module.d.ts +0 -6
- package/cache/cache.module.js +7 -7
- package/cache/cache.service.js +12 -0
- package/cache/dependencies/db.dependency.d.ts +0 -13
- package/cache/dependencies/db.dependency.js +0 -16
- package/cache/dependencies/tag.dependency.d.ts +39 -4
- package/cache/dependencies/tag.dependency.js +109 -11
- package/cache/interfaces/cache-options.interface.d.ts +8 -0
- package/cache/providers/memory-cache.provider.d.ts +20 -0
- package/cache/providers/memory-cache.provider.js +40 -0
- package/http-client/config/http-client.config.d.ts +5 -0
- package/http-client/config/http-client.config.js +24 -13
- package/http-client/decorators/http-client.decorators.d.ts +1 -25
- package/http-client/decorators/http-client.decorators.js +97 -90
- package/http-client/entities/http-log.entity.d.ts +0 -20
- package/http-client/entities/http-log.entity.js +0 -12
- package/http-client/examples/advanced-usage.example.d.ts +4 -5
- package/http-client/examples/advanced-usage.example.js +4 -56
- package/http-client/http-client.module.d.ts +35 -2
- package/http-client/http-client.module.js +80 -75
- package/http-client/index.d.ts +1 -1
- package/http-client/interfaces/api-client-config.interface.d.ts +1 -91
- package/http-client/interfaces/http-client-config.interface.d.ts +53 -62
- package/http-client/services/api-client-registry.service.d.ts +5 -23
- package/http-client/services/api-client-registry.service.js +41 -284
- package/http-client/services/circuit-breaker.service.d.ts +69 -2
- package/http-client/services/circuit-breaker.service.js +185 -7
- package/http-client/services/http-client.service.d.ts +58 -23
- package/http-client/services/http-client.service.js +294 -150
- package/http-client/services/http-log-query.service.js +0 -13
- package/http-client/services/index.d.ts +0 -1
- package/http-client/services/index.js +0 -1
- package/http-client/services/logging.service.d.ts +79 -10
- package/http-client/services/logging.service.js +246 -51
- package/http-client/utils/call-stack-extractor.util.d.ts +26 -0
- package/http-client/utils/call-stack-extractor.util.js +35 -0
- package/http-client/utils/security-validator.util.d.ts +118 -0
- package/http-client/utils/security-validator.util.js +352 -0
- package/package.json +1 -1
- package/redis-lock/lock-heartbeat.service.d.ts +2 -0
- package/redis-lock/lock-heartbeat.service.js +12 -2
- package/redis-lock/redis-lock.service.d.ts +4 -0
- package/redis-lock/redis-lock.service.js +61 -8
- package/http-client/services/cache.service.d.ts +0 -76
- package/http-client/services/cache.service.js +0 -333
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
|
-
import { HttpCacheConfig } from '../interfaces/http-client-config.interface';
|
|
3
|
-
import { CacheService } from '../../cache/cache.service';
|
|
4
|
-
/**
|
|
5
|
-
* HTTP缓存服务
|
|
6
|
-
* 集成现有的三层缓存架构
|
|
7
|
-
*/
|
|
8
|
-
export declare class HttpCacheService {
|
|
9
|
-
private readonly cacheService;
|
|
10
|
-
private readonly logger;
|
|
11
|
-
constructor(cacheService: CacheService);
|
|
12
|
-
/**
|
|
13
|
-
* 获取缓存的响应
|
|
14
|
-
*/
|
|
15
|
-
get(config: AxiosRequestConfig, cacheOptions: HttpCacheConfig): Promise<AxiosResponse | null>;
|
|
16
|
-
/**
|
|
17
|
-
* 缓存响应
|
|
18
|
-
*/
|
|
19
|
-
set(config: AxiosRequestConfig, response: AxiosResponse, cacheOptions: HttpCacheConfig): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* 清除缓存
|
|
22
|
-
*/
|
|
23
|
-
clear(pattern?: string): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* 获取缓存统计信息
|
|
26
|
-
*/
|
|
27
|
-
getStats(): Promise<any>;
|
|
28
|
-
/**
|
|
29
|
-
* 清理过期缓存
|
|
30
|
-
*/
|
|
31
|
-
cleanup(): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* 预热缓存
|
|
34
|
-
*/
|
|
35
|
-
warmup(urls: string[], headers?: Record<string, string>): Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* 获取缓存命中率详情
|
|
38
|
-
*/
|
|
39
|
-
getDetailedStats(): Promise<any>;
|
|
40
|
-
/**
|
|
41
|
-
* 生成缓存键
|
|
42
|
-
*/
|
|
43
|
-
private generateCacheKey;
|
|
44
|
-
/**
|
|
45
|
-
* 构建完整的缓存键
|
|
46
|
-
*/
|
|
47
|
-
private buildCacheKey;
|
|
48
|
-
/**
|
|
49
|
-
* 映射缓存层
|
|
50
|
-
*/
|
|
51
|
-
private mapLayers;
|
|
52
|
-
/**
|
|
53
|
-
* 选择用于缓存键的头信息
|
|
54
|
-
*/
|
|
55
|
-
private selectHeadersForCacheKey;
|
|
56
|
-
/**
|
|
57
|
-
* 判断响应是否可缓存
|
|
58
|
-
*/
|
|
59
|
-
private isResponseCacheable;
|
|
60
|
-
/**
|
|
61
|
-
* 哈希对象
|
|
62
|
-
*/
|
|
63
|
-
private hashObject;
|
|
64
|
-
/**
|
|
65
|
-
* 计算综合命中率
|
|
66
|
-
*/
|
|
67
|
-
private calculateHitRate;
|
|
68
|
-
/**
|
|
69
|
-
* 获取最近的缓存活动
|
|
70
|
-
*/
|
|
71
|
-
private getRecentCacheActivity;
|
|
72
|
-
/**
|
|
73
|
-
* 生成缓存优化建议
|
|
74
|
-
*/
|
|
75
|
-
private generateRecommendations;
|
|
76
|
-
}
|
|
@@ -1,333 +0,0 @@
|
|
|
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
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
12
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
13
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
14
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
15
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
16
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
17
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
var HttpCacheService_1;
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.HttpCacheService = void 0;
|
|
23
|
-
const common_1 = require("@nestjs/common");
|
|
24
|
-
const cache_service_1 = require("../../cache/cache.service");
|
|
25
|
-
const cache_options_interface_1 = require("../../cache/interfaces/cache-options.interface");
|
|
26
|
-
/**
|
|
27
|
-
* HTTP缓存服务
|
|
28
|
-
* 集成现有的三层缓存架构
|
|
29
|
-
*/
|
|
30
|
-
let HttpCacheService = HttpCacheService_1 = class HttpCacheService {
|
|
31
|
-
constructor(cacheService) {
|
|
32
|
-
this.cacheService = cacheService;
|
|
33
|
-
this.logger = new common_1.Logger(HttpCacheService_1.name);
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* 获取缓存的响应
|
|
37
|
-
*/
|
|
38
|
-
get(config, cacheOptions) {
|
|
39
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
-
var _a;
|
|
41
|
-
const key = this.generateCacheKey(config, cacheOptions);
|
|
42
|
-
const cacheKey = this.buildCacheKey(cacheOptions, key);
|
|
43
|
-
try {
|
|
44
|
-
const cachedResponse = yield this.cacheService.get(cacheKey, {
|
|
45
|
-
layers: this.mapLayers((_a = cacheOptions.options) === null || _a === void 0 ? void 0 : _a.layers),
|
|
46
|
-
ttl: cacheOptions.defaultTtl,
|
|
47
|
-
});
|
|
48
|
-
if (cachedResponse) {
|
|
49
|
-
this.logger.debug(`Cache hit: ${cacheKey}`);
|
|
50
|
-
return cachedResponse;
|
|
51
|
-
}
|
|
52
|
-
this.logger.debug(`Cache miss: ${cacheKey}`);
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
this.logger.warn(`Cache get error: ${error.message}`);
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* 缓存响应
|
|
63
|
-
*/
|
|
64
|
-
set(config, response, cacheOptions) {
|
|
65
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
-
var _a, _b, _c, _d;
|
|
67
|
-
const key = this.generateCacheKey(config, cacheOptions);
|
|
68
|
-
const cacheKey = this.buildCacheKey(cacheOptions, key);
|
|
69
|
-
if (!this.isResponseCacheable(response, cacheOptions)) {
|
|
70
|
-
this.logger.debug(`Response not cacheable: ${response.status} ${config.url}`);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
try {
|
|
74
|
-
yield this.cacheService.set(cacheKey, response, {
|
|
75
|
-
layers: this.mapLayers((_a = cacheOptions.options) === null || _a === void 0 ? void 0 : _a.layers),
|
|
76
|
-
ttl: cacheOptions.defaultTtl,
|
|
77
|
-
namespace: ((_b = cacheOptions.options) === null || _b === void 0 ? void 0 : _b.prefix) || 'http',
|
|
78
|
-
condition: (_c = cacheOptions.options) === null || _c === void 0 ? void 0 : _c.condition,
|
|
79
|
-
backfill: (_d = cacheOptions.options) === null || _d === void 0 ? void 0 : _d.backfill,
|
|
80
|
-
});
|
|
81
|
-
this.logger.debug(`Response cached: ${cacheKey}`);
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
this.logger.warn(`Cache set error: ${error.message}`);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* 清除缓存
|
|
90
|
-
*/
|
|
91
|
-
clear(pattern) {
|
|
92
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
try {
|
|
94
|
-
if (pattern) {
|
|
95
|
-
// 使用通配符清除
|
|
96
|
-
yield this.cacheService.deletePattern(pattern);
|
|
97
|
-
this.logger.debug(`Cache cleared with pattern: ${pattern}`);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
// 清除所有HTTP相关缓存
|
|
101
|
-
yield this.cacheService.deletePattern('http:*');
|
|
102
|
-
this.logger.debug('All HTTP cache cleared');
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
this.logger.warn(`Cache clear error: ${error.message}`);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* 获取缓存统计信息
|
|
112
|
-
*/
|
|
113
|
-
getStats() {
|
|
114
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
-
try {
|
|
116
|
-
const stats = this.cacheService.getStats();
|
|
117
|
-
return stats;
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
this.logger.warn(`Get cache stats error: ${error.message}`);
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* 清理过期缓存
|
|
127
|
-
*/
|
|
128
|
-
cleanup() {
|
|
129
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
130
|
-
try {
|
|
131
|
-
// CacheService doesn't have cleanup method, so we'll clear HTTP cache patterns
|
|
132
|
-
yield this.cacheService.deletePattern('http:*');
|
|
133
|
-
this.logger.debug('HTTP cache cleanup completed');
|
|
134
|
-
}
|
|
135
|
-
catch (error) {
|
|
136
|
-
this.logger.warn(`Cache cleanup error: ${error.message}`);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* 预热缓存
|
|
142
|
-
*/
|
|
143
|
-
warmup(urls, headers) {
|
|
144
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
145
|
-
this.logger.log(`Starting cache warmup for ${urls.length} URLs`);
|
|
146
|
-
// 这里可以实现预热逻辑
|
|
147
|
-
// 例如:预先请求这些URL并缓存响应
|
|
148
|
-
// 实际实现需要访问HTTP客户端服务,可能需要通过事件或其他方式实现
|
|
149
|
-
this.logger.log('Cache warmup completed');
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* 获取缓存命中率详情
|
|
154
|
-
*/
|
|
155
|
-
getDetailedStats() {
|
|
156
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
-
try {
|
|
158
|
-
const stats = yield this.getStats();
|
|
159
|
-
const recentHits = yield this.getRecentCacheActivity();
|
|
160
|
-
return Object.assign(Object.assign({}, stats), { recentActivity: recentHits, recommendations: this.generateRecommendations(stats) });
|
|
161
|
-
}
|
|
162
|
-
catch (error) {
|
|
163
|
-
this.logger.warn(`Get detailed cache stats error: ${error.message}`);
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* 生成缓存键
|
|
170
|
-
*/
|
|
171
|
-
generateCacheKey(config, cacheOptions) {
|
|
172
|
-
var _a;
|
|
173
|
-
if (cacheOptions.keyGenerator) {
|
|
174
|
-
return cacheOptions.keyGenerator(config);
|
|
175
|
-
}
|
|
176
|
-
// 默认键生成逻辑
|
|
177
|
-
const keyData = {
|
|
178
|
-
method: (_a = config.method) === null || _a === void 0 ? void 0 : _a.toLowerCase(),
|
|
179
|
-
url: config.url,
|
|
180
|
-
params: config.params,
|
|
181
|
-
data: config.data,
|
|
182
|
-
headers: this.selectHeadersForCacheKey(config.headers),
|
|
183
|
-
};
|
|
184
|
-
// 简单的哈希键生成
|
|
185
|
-
return this.hashObject(keyData);
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* 构建完整的缓存键
|
|
189
|
-
*/
|
|
190
|
-
buildCacheKey(cacheOptions, key) {
|
|
191
|
-
var _a;
|
|
192
|
-
const namespace = ((_a = cacheOptions.options) === null || _a === void 0 ? void 0 : _a.prefix) || 'http';
|
|
193
|
-
return `${namespace}:${key}`;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* 映射缓存层
|
|
197
|
-
*/
|
|
198
|
-
mapLayers(layers) {
|
|
199
|
-
if (!layers || layers.length === 0) {
|
|
200
|
-
return [cache_options_interface_1.CacheLayer.MEMORY, cache_options_interface_1.CacheLayer.REDIS]; // 默认使用内存和Redis
|
|
201
|
-
}
|
|
202
|
-
return layers.map((layer) => {
|
|
203
|
-
switch (layer) {
|
|
204
|
-
case 'cls':
|
|
205
|
-
return cache_options_interface_1.CacheLayer.CLS;
|
|
206
|
-
case 'memory':
|
|
207
|
-
return cache_options_interface_1.CacheLayer.MEMORY;
|
|
208
|
-
case 'redis':
|
|
209
|
-
return cache_options_interface_1.CacheLayer.REDIS;
|
|
210
|
-
default:
|
|
211
|
-
return cache_options_interface_1.CacheLayer.MEMORY;
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* 选择用于缓存键的头信息
|
|
217
|
-
*/
|
|
218
|
-
selectHeadersForCacheKey(headers) {
|
|
219
|
-
if (!headers)
|
|
220
|
-
return {};
|
|
221
|
-
// 只选择影响响应内容的头信息
|
|
222
|
-
const cacheKeyHeaders = [
|
|
223
|
-
'accept',
|
|
224
|
-
'accept-language',
|
|
225
|
-
'accept-encoding',
|
|
226
|
-
'content-type',
|
|
227
|
-
'authorization', // 包含授权信息以确保缓存的安全性
|
|
228
|
-
];
|
|
229
|
-
const selectedHeaders = {};
|
|
230
|
-
cacheKeyHeaders.forEach((key) => {
|
|
231
|
-
if (headers[key]) {
|
|
232
|
-
selectedHeaders[key] = headers[key];
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
return selectedHeaders;
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* 判断响应是否可缓存
|
|
239
|
-
*/
|
|
240
|
-
isResponseCacheable(response, config) {
|
|
241
|
-
var _a;
|
|
242
|
-
// 检查状态码
|
|
243
|
-
if (!config.cacheableStatusCodes.includes(response.status)) {
|
|
244
|
-
return false;
|
|
245
|
-
}
|
|
246
|
-
// 检查方法
|
|
247
|
-
const method = (_a = response.config.method) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
248
|
-
if (!config.cacheableMethods.includes(method || 'get')) {
|
|
249
|
-
return false;
|
|
250
|
-
}
|
|
251
|
-
// 检查缓存控制头
|
|
252
|
-
const cacheControl = response.headers['cache-control'];
|
|
253
|
-
if (cacheControl) {
|
|
254
|
-
if (cacheControl.includes('no-store') ||
|
|
255
|
-
cacheControl.includes('no-cache')) {
|
|
256
|
-
return false;
|
|
257
|
-
}
|
|
258
|
-
if (cacheControl.includes('private')) {
|
|
259
|
-
// 私有缓存可能需要特殊处理
|
|
260
|
-
this.logger.debug('Private cache detected, caching with caution');
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
// 检查响应大小
|
|
264
|
-
if (response.data) {
|
|
265
|
-
const responseSize = JSON.stringify(response.data).length;
|
|
266
|
-
if (responseSize > 1024 * 1024) {
|
|
267
|
-
// 1MB限制
|
|
268
|
-
this.logger.warn(`Response too large for caching: ${responseSize} bytes`);
|
|
269
|
-
return false;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
return true;
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* 哈希对象
|
|
276
|
-
*/
|
|
277
|
-
hashObject(obj) {
|
|
278
|
-
const str = JSON.stringify(obj, Object.keys(obj).sort());
|
|
279
|
-
let hash = 0;
|
|
280
|
-
for (let i = 0; i < str.length; i++) {
|
|
281
|
-
const char = str.charCodeAt(i);
|
|
282
|
-
hash = (hash << 5) - hash + char;
|
|
283
|
-
hash = hash & hash; // 转换为32位整数
|
|
284
|
-
}
|
|
285
|
-
return Math.abs(hash).toString(36);
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* 计算综合命中率
|
|
289
|
-
*/
|
|
290
|
-
calculateHitRate(...stats) {
|
|
291
|
-
let totalHits = 0;
|
|
292
|
-
let totalRequests = 0;
|
|
293
|
-
stats.forEach((stat) => {
|
|
294
|
-
if (stat) {
|
|
295
|
-
totalHits += stat.hits || 0;
|
|
296
|
-
totalRequests += (stat.hits || 0) + (stat.misses || 0);
|
|
297
|
-
}
|
|
298
|
-
});
|
|
299
|
-
return totalRequests > 0 ? (totalHits / totalRequests) * 100 : 0;
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* 获取最近的缓存活动
|
|
303
|
-
*/
|
|
304
|
-
getRecentCacheActivity() {
|
|
305
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
306
|
-
// 这里可以实现获取最近缓存活动的逻辑
|
|
307
|
-
// 例如:从Redis获取最近的缓存键访问记录
|
|
308
|
-
return {
|
|
309
|
-
recentHits: 0,
|
|
310
|
-
recentMisses: 0,
|
|
311
|
-
topCacheKeys: [],
|
|
312
|
-
};
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* 生成缓存优化建议
|
|
317
|
-
*/
|
|
318
|
-
generateRecommendations(stats) {
|
|
319
|
-
const recommendations = [];
|
|
320
|
-
if (stats.combined.hitRate < 50) {
|
|
321
|
-
recommendations.push('Cache hit rate is low, consider increasing TTL or optimizing cache keys');
|
|
322
|
-
}
|
|
323
|
-
if (stats.redis.memoryUsage > 0.8) {
|
|
324
|
-
recommendations.push('Redis memory usage is high, consider increasing memory or cleaning up old cache entries');
|
|
325
|
-
}
|
|
326
|
-
return recommendations;
|
|
327
|
-
}
|
|
328
|
-
};
|
|
329
|
-
exports.HttpCacheService = HttpCacheService;
|
|
330
|
-
exports.HttpCacheService = HttpCacheService = HttpCacheService_1 = __decorate([
|
|
331
|
-
(0, common_1.Injectable)(),
|
|
332
|
-
__metadata("design:paramtypes", [cache_service_1.CacheService])
|
|
333
|
-
], HttpCacheService);
|