@roit/roit-data-firestore 1.2.43 → 1.2.44
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/archive/ArchivePluginRegistry.d.ts +78 -0
- package/dist/archive/ArchivePluginRegistry.js +135 -0
- package/dist/archive/ArchiveService.d.ts +61 -11
- package/dist/archive/ArchiveService.js +138 -120
- package/dist/archive/IArchivePlugin.d.ts +102 -0
- package/dist/archive/IArchivePlugin.js +12 -0
- package/dist/archive/index.d.ts +2 -0
- package/dist/archive/index.js +11 -0
- package/dist/cache/CacheResolver.js +6 -5
- package/dist/config/ArchiveConfig.d.ts +17 -12
- package/dist/config/ArchiveConfig.js +25 -41
- package/dist/config/BaseRepository.js +1 -1
- package/dist/config/ReadonlyRepository.js +1 -1
- package/dist/exception/RepositoryException.js +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +10 -1
- package/dist/model/CacheProviders.d.ts +1 -2
- package/dist/model/CacheProviders.js +1 -2
- package/dist/query/ManualQueryHelper.js +0 -1
- package/dist/query/QueryPredicateFunctionTransform.js +4 -1
- package/dist/template/FunctionAggregationTemplate.txt +1 -1
- package/dist/template/FunctionAverageTemplate.txt +1 -1
- package/dist/template/FunctionCountTemplate.txt +20 -25
- package/dist/template/FunctionCreateOrUpdateTemplate.txt +69 -20
- package/dist/template/FunctionCreateTemplate.txt +15 -13
- package/dist/template/FunctionDeleteTemplate.txt +45 -13
- package/dist/template/FunctionFindAllTemplate.txt +39 -23
- package/dist/template/FunctionFindByIdTemplate.txt +24 -14
- package/dist/template/FunctionQueryTemplate.txt +67 -41
- package/dist/template/FunctionSumTemplate.txt +48 -32
- package/dist/template/FunctionUpdatePartialTemplate.txt +76 -21
- package/dist/template/FunctionUpdateTemplate.txt +64 -17
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/cache/providers/RedisCacheArchiveProvider.d.ts +0 -19
- package/dist/cache/providers/RedisCacheArchiveProvider.js +0 -115
package/package.json
CHANGED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { CacheProvider } from "./CacheProvider";
|
|
2
|
-
export declare class RedisCacheArchiveProvider implements CacheProvider {
|
|
3
|
-
/**
|
|
4
|
-
* Redis module instance loaded dynamically.
|
|
5
|
-
*/
|
|
6
|
-
private redis;
|
|
7
|
-
/**
|
|
8
|
-
* Connected redis client.
|
|
9
|
-
*/
|
|
10
|
-
private client;
|
|
11
|
-
private isRedisReady;
|
|
12
|
-
constructor();
|
|
13
|
-
private handleTimeoutError;
|
|
14
|
-
getKeys(query: string): Promise<string[]>;
|
|
15
|
-
getCacheResult(key: string): Promise<any | null>;
|
|
16
|
-
saveCacheResult(key: string, valueToCache: any, ttl: number | undefined): Promise<void>;
|
|
17
|
-
delete(key: string): Promise<void>;
|
|
18
|
-
private loadRedis;
|
|
19
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RedisCacheArchiveProvider = void 0;
|
|
4
|
-
const PlatformTools_1 = require("../../platform/PlatformTools");
|
|
5
|
-
const promise_timeout_1 = require("promise-timeout");
|
|
6
|
-
const ArchiveConfig_1 = require("../../config/ArchiveConfig");
|
|
7
|
-
const REDIS_TIMEOUT = ArchiveConfig_1.ArchiveConfig.getConfig().cache.timeout;
|
|
8
|
-
const REDIS_RECONNECT = ArchiveConfig_1.ArchiveConfig.getConfig().cache.reconnectInSecondsAfterTimeout;
|
|
9
|
-
const REDIS_ENABLED = ArchiveConfig_1.ArchiveConfig.getConfig().cache.enabled;
|
|
10
|
-
class RedisCacheArchiveProvider {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.isRedisReady = false;
|
|
13
|
-
(0, ArchiveConfig_1.onDebugLog)(`Redis Caching Firestore Archive > Redis is enabled ${REDIS_ENABLED}`);
|
|
14
|
-
if (!this.redis && REDIS_ENABLED) {
|
|
15
|
-
const url = ArchiveConfig_1.ArchiveConfig.getConfig().cache.redisUrl;
|
|
16
|
-
if (!url) {
|
|
17
|
-
console.error(`${ArchiveConfig_1.DEBUG_PREFIX} [ERROR] Redis Caching > environtment variable "firestore.archive.cache.redisUrl" was not found!`);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
if (process.env.JEST_WORKER_ID !== undefined) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
this.redis = this.loadRedis();
|
|
24
|
-
this.client = this.redis.createClient({ url });
|
|
25
|
-
this.client.on('error', (err) => {
|
|
26
|
-
this.isRedisReady = false;
|
|
27
|
-
(0, ArchiveConfig_1.onDebugWarn)(`Redis error: ${err}`);
|
|
28
|
-
});
|
|
29
|
-
this.client.on('ready', () => {
|
|
30
|
-
this.isRedisReady = true;
|
|
31
|
-
(0, ArchiveConfig_1.onDebugLog)('Redis Caching Archive > Redis is ready');
|
|
32
|
-
});
|
|
33
|
-
this.client.connect();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
handleTimeoutError(error) {
|
|
37
|
-
if (error.message === 'Timeout' && this.isRedisReady) {
|
|
38
|
-
(0, ArchiveConfig_1.onDebugLog)('Setting isRedisReady as false');
|
|
39
|
-
this.isRedisReady = false;
|
|
40
|
-
// Stop everything for a while to unburden Redis
|
|
41
|
-
setTimeout(() => {
|
|
42
|
-
(0, ArchiveConfig_1.onDebugLog)('Setting isRedisReady as true');
|
|
43
|
-
this.isRedisReady = true;
|
|
44
|
-
}, REDIS_RECONNECT * 1000);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
getKeys(query) {
|
|
48
|
-
try {
|
|
49
|
-
if (this.isRedisReady) {
|
|
50
|
-
return (0, promise_timeout_1.timeout)(this.client.KEYS(`*${query}*`), REDIS_TIMEOUT);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
this.handleTimeoutError(error);
|
|
55
|
-
console.log(`${ArchiveConfig_1.DEBUG_PREFIX} Redis Caching > Error when getting KEYS with query: ${query}, error: ${error}`);
|
|
56
|
-
}
|
|
57
|
-
return Promise.resolve([]);
|
|
58
|
-
}
|
|
59
|
-
async getCacheResult(key) {
|
|
60
|
-
try {
|
|
61
|
-
if (this.isRedisReady) {
|
|
62
|
-
const result = await (0, promise_timeout_1.timeout)(this.client.get(key), REDIS_TIMEOUT);
|
|
63
|
-
if (result) {
|
|
64
|
-
(0, ArchiveConfig_1.onDebugLog)(`Redis Caching > Return value in cache from key: ${key}`);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
(0, ArchiveConfig_1.onDebugLog)(`Redis Caching > Key [${key}] is not found in the cache`);
|
|
68
|
-
}
|
|
69
|
-
if (result) {
|
|
70
|
-
return JSON.parse(result);
|
|
71
|
-
}
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
this.handleTimeoutError(error);
|
|
77
|
-
console.log(`${ArchiveConfig_1.DEBUG_PREFIX} Redis Caching > Error when getting key from redis. ${key}`, { error });
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
async saveCacheResult(key, valueToCache, ttl) {
|
|
82
|
-
if (this.isRedisReady) {
|
|
83
|
-
try {
|
|
84
|
-
await (0, promise_timeout_1.timeout)(this.client.set(key, JSON.stringify(valueToCache), {
|
|
85
|
-
EX: ttl || ArchiveConfig_1.ArchiveConfig.getConfig().cache.expiresInSeconds
|
|
86
|
-
}), REDIS_TIMEOUT);
|
|
87
|
-
(0, ArchiveConfig_1.onDebugLog)(`Redis Caching > Storage cache from key: ${key}`);
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
this.handleTimeoutError(error);
|
|
91
|
-
console.log(`${ArchiveConfig_1.DEBUG_PREFIX} Redis Caching > Error when saving cache. Key: ${key}, value: ${valueToCache}, error: ${error}`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
async delete(key) {
|
|
96
|
-
try {
|
|
97
|
-
if (this.isRedisReady) {
|
|
98
|
-
await (0, promise_timeout_1.timeout)(this.client.del(key), REDIS_TIMEOUT);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
this.handleTimeoutError(error);
|
|
103
|
-
console.log(`${ArchiveConfig_1.DEBUG_PREFIX} Redis Caching > Error when deleting key from redis. ${key}`);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
loadRedis() {
|
|
107
|
-
try {
|
|
108
|
-
return PlatformTools_1.PlatformTools.load("redis");
|
|
109
|
-
}
|
|
110
|
-
catch (e) {
|
|
111
|
-
throw new Error(`Cannot use cache because redis is not installed. Please run "npm i redis@4.0.6 --save-exact".`);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
exports.RedisCacheArchiveProvider = RedisCacheArchiveProvider;
|