mvc-common-toolkit 1.44.8 → 1.45.1
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/src/interfaces.d.ts +5 -0
- package/dist/src/pkg/paginated-cache-registry.d.ts +1 -5
- package/dist/src/pkg/paginated-cache-registry.js +1 -14
- package/dist/src/pkg/paginated-cache-registry.js.map +1 -1
- package/dist/src/pkg/scripts/lua.js +11 -1
- package/dist/src/pkg/scripts/lua.js.map +1 -1
- package/dist/src/pkg/task-helper.spec.js +100 -0
- package/dist/src/pkg/task-helper.spec.js.map +1 -0
- package/dist/src/services/paginated-cache.d.ts +8 -14
- package/dist/src/services/paginated-cache.js +12 -65
- package/dist/src/services/paginated-cache.js.map +1 -1
- package/dist/src/services/redis-service.d.ts +5 -2
- package/dist/src/services/redis-service.js +15 -0
- package/dist/src/services/redis-service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/interfaces.ts +6 -0
- package/src/pkg/paginated-cache-registry.ts +0 -19
- package/src/pkg/scripts/lua.ts +11 -1
- package/src/pkg/task-helper.spec.ts +121 -0
- package/src/services/paginated-cache.ts +19 -101
- package/src/services/redis-service.ts +15 -1
- package/dist/src/services/paginated-cache.spec.js +0 -284
- package/dist/src/services/paginated-cache.spec.js.map +0 -1
- package/src/services/paginated-cache.spec.ts +0 -519
- /package/dist/src/{services/paginated-cache.spec.d.ts → pkg/task-helper.spec.d.ts} +0 -0
package/dist/src/interfaces.d.ts
CHANGED
|
@@ -108,6 +108,11 @@ export interface HashCacheService {
|
|
|
108
108
|
hdel(key: string, ...fields: string[]): Promise<number>;
|
|
109
109
|
hexists(key: string, field: string): Promise<number>;
|
|
110
110
|
}
|
|
111
|
+
export interface SetCacheService {
|
|
112
|
+
sadd(key: string, ...values: string[]): Promise<number>;
|
|
113
|
+
srem(key: string, ...values: string[]): Promise<number>;
|
|
114
|
+
scard(key: string): Promise<number>;
|
|
115
|
+
}
|
|
111
116
|
export interface ListCacheService {
|
|
112
117
|
lpush(key: string, value: any): Promise<void>;
|
|
113
118
|
lset(key: string, index: number, value: any): Promise<void>;
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IPaginatedDataCache } from "../interfaces";
|
|
2
2
|
export declare class PaginatedCacheRegistry {
|
|
3
|
-
protected cacheService: CacheService;
|
|
4
3
|
protected _registry: Map<string, IPaginatedDataCache<any>>;
|
|
5
|
-
constructor(cacheService: CacheService);
|
|
6
|
-
has(dataName: string): boolean;
|
|
7
|
-
getOrCreatePaginatedCache<T = any>(dataName: string): IPaginatedDataCache<T>;
|
|
8
4
|
}
|
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PaginatedCacheRegistry = void 0;
|
|
4
|
-
const paginated_cache_1 = require("../services/paginated-cache");
|
|
5
4
|
class PaginatedCacheRegistry {
|
|
6
|
-
constructor(
|
|
7
|
-
this.cacheService = cacheService;
|
|
5
|
+
constructor() {
|
|
8
6
|
this._registry = new Map();
|
|
9
7
|
}
|
|
10
|
-
has(dataName) {
|
|
11
|
-
return this._registry.has(dataName);
|
|
12
|
-
}
|
|
13
|
-
getOrCreatePaginatedCache(dataName) {
|
|
14
|
-
if (this._registry.has(dataName)) {
|
|
15
|
-
return this._registry.get(dataName);
|
|
16
|
-
}
|
|
17
|
-
const service = new paginated_cache_1.PaginatedDataCache(dataName, this.cacheService);
|
|
18
|
-
this._registry.set(dataName, service);
|
|
19
|
-
return service;
|
|
20
|
-
}
|
|
21
8
|
}
|
|
22
9
|
exports.PaginatedCacheRegistry = PaginatedCacheRegistry;
|
|
23
10
|
//# sourceMappingURL=paginated-cache-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paginated-cache-registry.js","sourceRoot":"","sources":["../../../src/pkg/paginated-cache-registry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"paginated-cache-registry.js","sourceRoot":"","sources":["../../../src/pkg/paginated-cache-registry.ts"],"names":[],"mappings":";;;AAGA,MAAa,sBAAsB;IAAnC;QACY,cAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC/D,CAAC;CAAA;AAFD,wDAEC"}
|
|
@@ -110,15 +110,24 @@ const incrementAndCompareNumber = () => `
|
|
|
110
110
|
-- KEYS[1] = key
|
|
111
111
|
-- ARGV[1] = operator ("lt"|"lte"|"eq"|"gte"|"gt")
|
|
112
112
|
-- ARGV[2] = number to compare against
|
|
113
|
+
-- ARGV[3] = ttl seconds (optional). pass "0" or "" to skip setting TTL.
|
|
113
114
|
|
|
114
115
|
local k = KEYS[1]
|
|
115
116
|
local op = ARGV[1]
|
|
116
117
|
local rhs = tonumber(ARGV[2])
|
|
118
|
+
local ttl = tonumber(ARGV[3]) or 0
|
|
119
|
+
|
|
117
120
|
if rhs == nil then
|
|
118
121
|
return redis.error_reply("ERR invalid compare number: " .. tostring(ARGV[2]))
|
|
119
122
|
end
|
|
120
123
|
|
|
121
|
-
|
|
124
|
+
-- increment unconditionally (will create key with value 1 if missing)
|
|
125
|
+
local lhs = redis.call("INCR", k)
|
|
126
|
+
|
|
127
|
+
-- if this was the first increment, set TTL if requested
|
|
128
|
+
if lhs == 1 and ttl and ttl > 0 then
|
|
129
|
+
redis.call("EXPIRE", k, ttl)
|
|
130
|
+
end
|
|
122
131
|
|
|
123
132
|
local matched = false
|
|
124
133
|
if op == "lt" then matched = (lhs < rhs)
|
|
@@ -131,6 +140,7 @@ else
|
|
|
131
140
|
end
|
|
132
141
|
|
|
133
142
|
return matched and 1 or 0
|
|
143
|
+
|
|
134
144
|
`;
|
|
135
145
|
exports.incrementAndCompareNumber = incrementAndCompareNumber;
|
|
136
146
|
//# sourceMappingURL=lua.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lua.js","sourceRoot":"","sources":["../../../../src/pkg/scripts/lua.ts"],"names":[],"mappings":";;;AAAa,QAAA,0BAA0B,GAAG;;;;;;;CAOzC,CAAC;AAEW,QAAA,uBAAuB,GAAG;;;;;;;;;;;CAWtC,CAAC;AACW,QAAA,uBAAuB,GAAG;;;;;;;;;;;CAWtC,CAAC;AACW,QAAA,4BAA4B,GAAG;;;;;;;;;;;CAW3C,CAAC;AAEW,QAAA,cAAc,GAAG;;;;;;CAM7B,CAAC;AAEW,QAAA,0BAA0B,GAAG;;;;;;;CAOzC,CAAC;AAEW,QAAA,cAAc,GAAG;;;;;;CAM7B,CAAC;AAEW,QAAA,+BAA+B,GAAG;;;;;;;CAO9C,CAAC;AAEW,QAAA,mBAAmB,GAAG;;;;;;CAMlC,CAAC;AAEW,QAAA,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBzC,CAAC;AACK,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC
|
|
1
|
+
{"version":3,"file":"lua.js","sourceRoot":"","sources":["../../../../src/pkg/scripts/lua.ts"],"names":[],"mappings":";;;AAAa,QAAA,0BAA0B,GAAG;;;;;;;CAOzC,CAAC;AAEW,QAAA,uBAAuB,GAAG;;;;;;;;;;;CAWtC,CAAC;AACW,QAAA,uBAAuB,GAAG;;;;;;;;;;;CAWtC,CAAC;AACW,QAAA,4BAA4B,GAAG;;;;;;;;;;;CAW3C,CAAC;AAEW,QAAA,cAAc,GAAG;;;;;;CAM7B,CAAC;AAEW,QAAA,0BAA0B,GAAG;;;;;;;CAOzC,CAAC;AAEW,QAAA,cAAc,GAAG;;;;;;CAM7B,CAAC;AAEW,QAAA,+BAA+B,GAAG;;;;;;;CAO9C,CAAC;AAEW,QAAA,mBAAmB,GAAG;;;;;;CAMlC,CAAC;AAEW,QAAA,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBzC,CAAC;AACK,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC9C,CAAC;AAnCW,QAAA,yBAAyB,6BAmCpC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const chai_1 = require("chai");
|
|
16
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
17
|
+
const task_helper_1 = require("./task-helper");
|
|
18
|
+
const delayResolve = (value, ms) => () => new Promise((res) => {
|
|
19
|
+
setTimeout(() => res(value), ms);
|
|
20
|
+
});
|
|
21
|
+
const delayReject = (err, ms) => () => new Promise((_, rej) => {
|
|
22
|
+
setTimeout(() => rej(err), ms);
|
|
23
|
+
});
|
|
24
|
+
describe("runWithTimeout (TypeScript)", () => {
|
|
25
|
+
let clock;
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
clock = sinon_1.default.useFakeTimers();
|
|
28
|
+
});
|
|
29
|
+
afterEach(() => {
|
|
30
|
+
clock.restore();
|
|
31
|
+
});
|
|
32
|
+
it("resolves when handler completes before timeout", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
|
+
const handler = delayResolve("ok", 10);
|
|
34
|
+
const p = (0, task_helper_1.runWithTimeout)(handler, 50);
|
|
35
|
+
yield clock.tickAsync(20);
|
|
36
|
+
const result = yield p;
|
|
37
|
+
(0, chai_1.expect)(result).to.equal("ok");
|
|
38
|
+
}));
|
|
39
|
+
it("rejects when handler rejects before timeout", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
+
const handler = delayReject(new Error("boom"), 10);
|
|
41
|
+
const p = (0, task_helper_1.runWithTimeout)(handler, 50);
|
|
42
|
+
yield clock.tickAsync(20);
|
|
43
|
+
try {
|
|
44
|
+
yield p;
|
|
45
|
+
throw new Error("expected to reject");
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
(0, chai_1.expect)(err).to.be.instanceOf(Error);
|
|
49
|
+
(0, chai_1.expect)(err.message).to.equal("boom");
|
|
50
|
+
}
|
|
51
|
+
}));
|
|
52
|
+
it('rejects with "task timed out" when handler does not complete before timeout', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
53
|
+
const handler = () => new Promise(() => { });
|
|
54
|
+
const p = (0, task_helper_1.runWithTimeout)(handler, 50);
|
|
55
|
+
yield clock.tickAsync(60);
|
|
56
|
+
try {
|
|
57
|
+
yield p;
|
|
58
|
+
throw new Error("expected to reject by timeout");
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
(0, chai_1.expect)(err).to.be.instanceOf(Error);
|
|
62
|
+
(0, chai_1.expect)(err.message).to.equal("task timed out");
|
|
63
|
+
}
|
|
64
|
+
}));
|
|
65
|
+
it("calls onCompletedAfterReject when handler resolves after timeout", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
66
|
+
const handler = delayResolve("late-result", 100);
|
|
67
|
+
const onCompletedAfterReject = sinon_1.default.spy();
|
|
68
|
+
const p = (0, task_helper_1.runWithTimeout)(handler, 50, onCompletedAfterReject);
|
|
69
|
+
yield clock.tickAsync(60);
|
|
70
|
+
try {
|
|
71
|
+
yield p;
|
|
72
|
+
throw new Error("expected to reject by timeout");
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
(0, chai_1.expect)(err).to.be.instanceOf(Error);
|
|
76
|
+
(0, chai_1.expect)(err.message).to.equal("task timed out");
|
|
77
|
+
}
|
|
78
|
+
yield clock.tickAsync(50);
|
|
79
|
+
(0, chai_1.expect)(onCompletedAfterReject.calledOnce).to.equal(true);
|
|
80
|
+
(0, chai_1.expect)(onCompletedAfterReject.calledWith("late-result")).to.equal(true);
|
|
81
|
+
}));
|
|
82
|
+
it("does NOT call onCompletedAfterReject when handler resolves before timeout", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
|
+
const handler = delayResolve("fast", 10);
|
|
84
|
+
const onCompletedAfterReject = sinon_1.default.spy();
|
|
85
|
+
const p = (0, task_helper_1.runWithTimeout)(handler, 50, onCompletedAfterReject);
|
|
86
|
+
yield clock.tickAsync(20);
|
|
87
|
+
const result = yield p;
|
|
88
|
+
(0, chai_1.expect)(result).to.equal("fast");
|
|
89
|
+
(0, chai_1.expect)(onCompletedAfterReject.notCalled).to.equal(true);
|
|
90
|
+
}));
|
|
91
|
+
it("clears timeout when handler resolves before timeout (no lingering timers)", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
92
|
+
const handler = delayResolve("fast", 10);
|
|
93
|
+
const p = (0, task_helper_1.runWithTimeout)(handler, 50);
|
|
94
|
+
yield clock.tickAsync(20);
|
|
95
|
+
const result = yield p;
|
|
96
|
+
(0, chai_1.expect)(result).to.equal("fast");
|
|
97
|
+
yield clock.tickAsync(1000);
|
|
98
|
+
}));
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=task-helper.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-helper.spec.js","sourceRoot":"","sources":["../../../src/pkg/task-helper.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import { CacheService,
|
|
2
|
-
export declare class PaginatedDataCache
|
|
1
|
+
import { CacheService, HashCacheService, PaginationResult } from "../interfaces";
|
|
2
|
+
export declare class PaginatedDataCache {
|
|
3
3
|
protected dataName: string;
|
|
4
|
-
protected cacheService: CacheService;
|
|
5
|
-
constructor(dataName: string, cacheService: CacheService);
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
_fetchVersionedDataFromCache(cacheKey: string, _overrideVersion?: number): Promise<{
|
|
11
|
-
currentVersion: number;
|
|
12
|
-
data: PaginationResult<T> | null;
|
|
13
|
-
}>;
|
|
14
|
-
protected _setVersionedDataInCache(cacheKey: string, data: PaginationResult<T>, ttl?: number): Promise<any>;
|
|
15
|
-
incrementCacheVersion(ttl?: number): Promise<number>;
|
|
4
|
+
protected cacheService: CacheService & HashCacheService;
|
|
5
|
+
constructor(dataName: string, cacheService: CacheService & HashCacheService);
|
|
6
|
+
protected getCacheKey(milestone: string | number, offset: number): string;
|
|
7
|
+
paginateV2(milestone: string | number, limit: number, dataRefresherV2: () => Promise<PaginationResult>, options?: {
|
|
8
|
+
expireInSecs: number;
|
|
9
|
+
}): Promise<PaginationResult>;
|
|
16
10
|
}
|
|
@@ -33,81 +33,28 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
33
33
|
};
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
35
|
exports.PaginatedDataCache = void 0;
|
|
36
|
-
const
|
|
36
|
+
const constants_1 = require("src/constants");
|
|
37
37
|
const objectHelper = __importStar(require("../pkg/object-helper"));
|
|
38
|
-
const constants_1 = require("../constants");
|
|
39
|
-
const hash_helper_1 = require("../pkg/hash-helper");
|
|
40
38
|
class PaginatedDataCache {
|
|
41
39
|
constructor(dataName, cacheService) {
|
|
42
40
|
this.dataName = dataName;
|
|
43
41
|
this.cacheService = cacheService;
|
|
44
|
-
this.generateCacheKey = (filter = {}, limit = 10, offset = 0) => {
|
|
45
|
-
const filterString = (0, hash_helper_1.generateHashFromJSON)(filter);
|
|
46
|
-
return `paginated-cache:${this.dataName}:version:_version:filter:${filterString}:limit:${limit}:offset:${offset}`;
|
|
47
|
-
};
|
|
48
42
|
}
|
|
49
|
-
|
|
50
|
-
return
|
|
51
|
-
const result = yield this.cacheService.getNumber((0, key_helper_1.getVersionCacheKeyForKey)(this.generateCacheKey()));
|
|
52
|
-
return result || 0;
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
getCachedPaginatedData(filter, limit, offset) {
|
|
56
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
-
const cacheKey = this.generateCacheKey(filter, limit, offset);
|
|
58
|
-
const { data } = yield this._fetchVersionedDataFromCache(cacheKey);
|
|
59
|
-
return data;
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
setCachedPaginatedData(filter, limit, offset, data, ttlInSecs = 60 * 30) {
|
|
63
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
const cacheKey = this.generateCacheKey(filter, limit, offset);
|
|
65
|
-
const currentVersion = yield this.getCurrentVersion();
|
|
66
|
-
if (currentVersion === 0) {
|
|
67
|
-
yield this.incrementCacheVersion(ttlInSecs);
|
|
68
|
-
}
|
|
69
|
-
return this._setVersionedDataInCache(cacheKey, data, ttlInSecs);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
_fetchVersionedDataFromCache(cacheKey, _overrideVersion) {
|
|
73
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
-
const currentVersion = _overrideVersion !== null && _overrideVersion !== void 0 ? _overrideVersion : (yield this.getCurrentVersion());
|
|
75
|
-
if (currentVersion === 0) {
|
|
76
|
-
return {
|
|
77
|
-
currentVersion: 0,
|
|
78
|
-
data: null,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
const versionedCacheKey = (0, key_helper_1.getVersionedCacheKey)(cacheKey, currentVersion);
|
|
82
|
-
const cachedData = yield this.cacheService.get(versionedCacheKey);
|
|
83
|
-
if (cachedData) {
|
|
84
|
-
return {
|
|
85
|
-
currentVersion: currentVersion,
|
|
86
|
-
data: objectHelper.tryParseStringIntoCorrectData(cachedData),
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
currentVersion: currentVersion,
|
|
91
|
-
data: null,
|
|
92
|
-
};
|
|
93
|
-
});
|
|
43
|
+
getCacheKey(milestone, offset) {
|
|
44
|
+
return `${this.dataName}:paginated_data`;
|
|
94
45
|
}
|
|
95
|
-
|
|
46
|
+
paginateV2(milestone, limit, dataRefresherV2, options = { expireInSecs: 60 * 5 }) {
|
|
96
47
|
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
48
|
+
const cacheKey = this.getCacheKey(milestone, limit);
|
|
49
|
+
const cached = yield this.cacheService.get(cacheKey);
|
|
50
|
+
if (cached)
|
|
51
|
+
return objectHelper.tryParseStringIntoCorrectData(cached);
|
|
52
|
+
const freshData = yield dataRefresherV2();
|
|
53
|
+
yield this.cacheService.set(cacheKey, JSON.stringify(freshData), {
|
|
101
54
|
policy: constants_1.SET_CACHE_POLICY.IF_NOT_EXISTS,
|
|
102
|
-
value:
|
|
55
|
+
value: options.expireInSecs,
|
|
103
56
|
});
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
incrementCacheVersion(ttl = 60 * 60 * 24) {
|
|
107
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
108
|
-
const cacheKey = this.generateCacheKey();
|
|
109
|
-
const versionCacheKey = (0, key_helper_1.getVersionCacheKeyForKey)(cacheKey);
|
|
110
|
-
return this.cacheService.incrBy(versionCacheKey, 1);
|
|
57
|
+
return freshData;
|
|
111
58
|
});
|
|
112
59
|
}
|
|
113
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paginated-cache.js","sourceRoot":"","sources":["../../../src/services/paginated-cache.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"paginated-cache.js","sourceRoot":"","sources":["../../../src/services/paginated-cache.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAiD;AAMjD,mEAAqD;AAErD,MAAa,kBAAkB;IAC7B,YACY,QAAgB,EAChB,YAA6C;QAD7C,aAAQ,GAAR,QAAQ,CAAQ;QAChB,iBAAY,GAAZ,YAAY,CAAiC;IACtD,CAAC;IAEM,WAAW,CAAC,SAA0B,EAAE,MAAc;QAC9D,OAAO,GAAG,IAAI,CAAC,QAAQ,iBAAiB,CAAC;IAC3C,CAAC;IAEY,UAAU,CACrB,SAA0B,EAC1B,KAAa,EACb,eAAgD,EAChD,UAAoC,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,EAAE;;YAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,MAAM;gBAAE,OAAO,YAAY,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;YAEtE,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAC;YAG1C,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;gBAC/D,MAAM,EAAE,4BAAgB,CAAC,aAAa;gBACtC,KAAK,EAAE,OAAO,CAAC,YAAY;aAC5B,CAAC,CAAC;YAEH,OAAO,SAAS,CAAC;QACnB,CAAC;KAAA;CACF;AA/BD,gDA+BC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import * as ioredis from "ioredis";
|
|
3
|
-
import { CacheScriptEvaluator, CacheService, DeleteByPatternOptions, HashCacheService, ListCacheService, LuaCall, SetCacheOption } from "../interfaces";
|
|
4
|
-
export declare class RedisService implements CacheService, HashCacheService, ListCacheService, CacheScriptEvaluator {
|
|
3
|
+
import { CacheScriptEvaluator, CacheService, DeleteByPatternOptions, HashCacheService, ListCacheService, LuaCall, SetCacheOption, SetCacheService } from "../interfaces";
|
|
4
|
+
export declare class RedisService implements CacheService, HashCacheService, ListCacheService, CacheScriptEvaluator, SetCacheService {
|
|
5
5
|
protected _redis: ioredis.Redis;
|
|
6
6
|
constructor(config: ioredis.RedisOptions);
|
|
7
7
|
get(key: string): Promise<any>;
|
|
@@ -9,6 +9,9 @@ export declare class RedisService implements CacheService, HashCacheService, Lis
|
|
|
9
9
|
deleteByPattern(deletePattern: string, options?: DeleteByPatternOptions): Promise<void>;
|
|
10
10
|
del(...keys: string[]): Promise<void>;
|
|
11
11
|
multiEval(calls: LuaCall[]): Promise<any[]>;
|
|
12
|
+
sadd(key: string, ...values: string[]): Promise<number>;
|
|
13
|
+
srem(key: string, ...values: string[]): Promise<number>;
|
|
14
|
+
scard(key: string): Promise<number>;
|
|
12
15
|
eval(script: string, numberOfKeys: number, ...args: any[]): Promise<unknown>;
|
|
13
16
|
hset(key: string, field: string, value: any): Promise<void>;
|
|
14
17
|
hexists(key: string, field: string): Promise<number>;
|
|
@@ -99,6 +99,21 @@ class RedisService {
|
|
|
99
99
|
return execResult.map(([, value]) => value);
|
|
100
100
|
});
|
|
101
101
|
}
|
|
102
|
+
sadd(key, ...values) {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
return this._redis.sadd(key, ...values);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
srem(key, ...values) {
|
|
108
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
+
return this._redis.srem(key, ...values);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
scard(key) {
|
|
113
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
+
return this._redis.scard(key);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
102
117
|
eval(script, numberOfKeys, ...args) {
|
|
103
118
|
return __awaiter(this, void 0, void 0, function* () {
|
|
104
119
|
return this._redis.eval(script, numberOfKeys, ...args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-service.js","sourceRoot":"","sources":["../../../src/services/redis-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;
|
|
1
|
+
{"version":3,"file":"redis-service.js","sourceRoot":"","sources":["../../../src/services/redis-service.ts"],"names":[],"mappings":"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"}
|