@edirect/rate-limit-module 2.0.10 → 11.0.40
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/README.md +88 -172
- package/dist/README.md +583 -0
- package/dist/package.json +41 -0
- package/dist/src/decorators/rate-limiting-rule.decorator.d.ts +1 -0
- package/dist/src/decorators/rate-limiting-rule.decorator.d.ts.map +1 -0
- package/dist/src/decorators/rate-limiting-rule.decorator.js +0 -1
- package/dist/src/guards/rate-limiting.guard.d.ts +1 -0
- package/dist/src/guards/rate-limiting.guard.d.ts.map +1 -0
- package/dist/src/guards/rate-limiting.guard.js +43 -36
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +9 -23
- package/dist/src/main.d.ts +1 -0
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/main.js +0 -1
- package/dist/src/object.utils.d.ts +1 -0
- package/dist/src/object.utils.d.ts.map +1 -0
- package/dist/src/object.utils.js +0 -1
- package/dist/src/rate-limiting.module.d.ts +1 -0
- package/dist/src/rate-limiting.module.d.ts.map +1 -0
- package/dist/src/rate-limiting.module.js +2 -8
- package/dist/src/rules/dto/pagination.dto.d.ts +1 -0
- package/dist/src/rules/dto/pagination.dto.d.ts.map +1 -0
- package/dist/src/rules/dto/pagination.dto.js +7 -16
- package/dist/src/rules/dto/rule.dto.d.ts +3 -2
- package/dist/src/rules/dto/rule.dto.d.ts.map +1 -0
- package/dist/src/rules/dto/rule.dto.js +35 -44
- package/dist/src/rules/interface/pagination.interface.d.ts +1 -0
- package/dist/src/rules/interface/pagination.interface.d.ts.map +1 -0
- package/dist/src/rules/interface/pagination.interface.js +0 -1
- package/dist/src/rules/interface/rule.interface.d.ts +1 -0
- package/dist/src/rules/interface/rule.interface.d.ts.map +1 -0
- package/dist/src/rules/interface/rule.interface.js +0 -1
- package/dist/src/rules/rule.controller.d.ts +1 -0
- package/dist/src/rules/rule.controller.d.ts.map +1 -0
- package/dist/src/rules/rule.controller.js +29 -41
- package/dist/src/rules/rule.module.d.ts +1 -0
- package/dist/src/rules/rule.module.d.ts.map +1 -0
- package/dist/src/rules/rule.module.js +2 -8
- package/dist/src/rules/rule.repository.d.ts +1 -0
- package/dist/src/rules/rule.repository.d.ts.map +1 -0
- package/dist/src/rules/rule.repository.js +4 -16
- package/dist/src/rules/rule.schema.d.ts +150 -3
- package/dist/src/rules/rule.schema.d.ts.map +1 -0
- package/dist/src/rules/rule.schema.js +49 -56
- package/dist/src/rules/rule.service.d.ts +3 -1
- package/dist/src/rules/rule.service.d.ts.map +1 -0
- package/dist/src/rules/rule.service.js +16 -22
- package/dist/src/shared/cache/cache.service.d.ts +2 -1
- package/dist/src/shared/cache/cache.service.d.ts.map +1 -0
- package/dist/src/shared/cache/cache.service.js +3 -12
- package/dist/src/shared/dsl/dsl.interface.d.ts +1 -0
- package/dist/src/shared/dsl/dsl.interface.d.ts.map +1 -0
- package/dist/src/shared/dsl/dsl.interface.js +0 -1
- package/dist/src/shared/dsl/dsl.service.d.ts +2 -1
- package/dist/src/shared/dsl/dsl.service.d.ts.map +1 -0
- package/dist/src/shared/dsl/dsl.service.js +38 -28
- package/dist/src/shared/redis/redis.module.d.ts +1 -0
- package/dist/src/shared/redis/redis.module.d.ts.map +1 -0
- package/dist/src/shared/redis/redis.module.js +3 -9
- package/dist/src/shared/redis/redis.service.d.ts +2 -1
- package/dist/src/shared/redis/redis.service.d.ts.map +1 -0
- package/dist/src/shared/redis/redis.service.js +5 -17
- package/dist/src/shared/rule-engine/interface/rule-engine.interface.d.ts +2 -1
- package/dist/src/shared/rule-engine/interface/rule-engine.interface.d.ts.map +1 -0
- package/dist/src/shared/rule-engine/interface/rule-engine.interface.js +0 -1
- package/dist/src/shared/rule-engine/rule-engine.module.d.ts +4 -3
- package/dist/src/shared/rule-engine/rule-engine.module.d.ts.map +1 -0
- package/dist/src/shared/rule-engine/rule-engine.module.js +4 -11
- package/dist/src/shared/rule-engine/rule-engine.service.d.ts +7 -6
- package/dist/src/shared/rule-engine/rule-engine.service.d.ts.map +1 -0
- package/dist/src/shared/rule-engine/rule-engine.service.js +14 -12
- package/dist/src/shared/shared.module.d.ts +1 -0
- package/dist/src/shared/shared.module.d.ts.map +1 -0
- package/dist/src/shared/shared.module.js +2 -8
- package/dist/src/validators/rule.constraint.d.ts +3 -2
- package/dist/src/validators/rule.constraint.d.ts.map +1 -0
- package/dist/src/validators/rule.constraint.js +13 -16
- package/dist/src/validators/rule.validator.d.ts +2 -1
- package/dist/src/validators/rule.validator.d.ts.map +1 -0
- package/dist/src/validators/rule.validator.js +0 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/package.json +43 -37
- package/dist/src/decorators/rate-limiting-rule.decorator.js.map +0 -1
- package/dist/src/guards/rate-limiting.guard.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/main.js.map +0 -1
- package/dist/src/mocks-modules/rate-limiting.module.d.ts +0 -21
- package/dist/src/mocks-modules/rate-limiting.module.js +0 -54
- package/dist/src/mocks-modules/rate-limiting.module.js.map +0 -1
- package/dist/src/mocks-modules/rule.module.d.ts +0 -5
- package/dist/src/mocks-modules/rule.module.js +0 -38
- package/dist/src/mocks-modules/rule.module.js.map +0 -1
- package/dist/src/mocks-modules/shared-module.mocks.d.ts +0 -10
- package/dist/src/mocks-modules/shared-module.mocks.js +0 -32
- package/dist/src/mocks-modules/shared-module.mocks.js.map +0 -1
- package/dist/src/object.utils.js.map +0 -1
- package/dist/src/rate-limiting.module.js.map +0 -1
- package/dist/src/rules/dto/pagination.dto.js.map +0 -1
- package/dist/src/rules/dto/rule.dto.js.map +0 -1
- package/dist/src/rules/interface/pagination.interface.js.map +0 -1
- package/dist/src/rules/interface/rule.interface.js.map +0 -1
- package/dist/src/rules/rule.controller.js.map +0 -1
- package/dist/src/rules/rule.module.js.map +0 -1
- package/dist/src/rules/rule.repository.js.map +0 -1
- package/dist/src/rules/rule.schema.js.map +0 -1
- package/dist/src/rules/rule.service.js.map +0 -1
- package/dist/src/shared/cache/cache.service.js.map +0 -1
- package/dist/src/shared/dls/dsl.interface.d.ts +0 -42
- package/dist/src/shared/dls/dsl.interface.js +0 -10
- package/dist/src/shared/dls/dsl.interface.js.map +0 -1
- package/dist/src/shared/dls/dsl.utils.d.ts +0 -3
- package/dist/src/shared/dls/dsl.utils.js +0 -73
- package/dist/src/shared/dls/dsl.utils.js.map +0 -1
- package/dist/src/shared/dsl/dsl.interface.js.map +0 -1
- package/dist/src/shared/dsl/dsl.service.js.map +0 -1
- package/dist/src/shared/dsl/dsl.utils.d.ts +0 -3
- package/dist/src/shared/dsl/dsl.utils.js +0 -73
- package/dist/src/shared/dsl/dsl.utils.js.map +0 -1
- package/dist/src/shared/redis/redis.module.js.map +0 -1
- package/dist/src/shared/redis/redis.service.js.map +0 -1
- package/dist/src/shared/rule-engine/interface/rule-engine.interface.js.map +0 -1
- package/dist/src/shared/rule-engine/rule-engine.module.js.map +0 -1
- package/dist/src/shared/rule-engine/rule-engine.service.js.map +0 -1
- package/dist/src/shared/shared.module.js.map +0 -1
- package/dist/src/validators/rule.constraint.js.map +0 -1
- package/dist/src/validators/rule.validator.js.map +0 -1
- package/dist/test/guards/rate-limiting.guard.spec.d.ts +0 -1
- package/dist/test/guards/rate-limiting.guard.spec.js +0 -93
- package/dist/test/guards/rate-limiting.guard.spec.js.map +0 -1
- package/dist/test/mocks/rate-limiting-module.mocks.d.ts +0 -2
- package/dist/test/mocks/rate-limiting-module.mocks.js +0 -60
- package/dist/test/mocks/rate-limiting-module.mocks.js.map +0 -1
- package/dist/test/mocks/rate-limiting.mocks.d.ts +0 -17
- package/dist/test/mocks/rate-limiting.mocks.js +0 -21
- package/dist/test/mocks/rate-limiting.mocks.js.map +0 -1
- package/dist/test/mocks/rule-engine.mocks.d.ts +0 -7
- package/dist/test/mocks/rule-engine.mocks.js +0 -11
- package/dist/test/mocks/rule-engine.mocks.js.map +0 -1
- package/dist/test/mocks/rule.mocks.d.ts +0 -32
- package/dist/test/mocks/rule.mocks.js +0 -58
- package/dist/test/mocks/rule.mocks.js.map +0 -1
- package/dist/test/mocks/shared-module.mocks.d.ts +0 -10
- package/dist/test/mocks/shared-module.mocks.js +0 -32
- package/dist/test/mocks/shared-module.mocks.js.map +0 -1
- package/dist/test/mocks/shared.mocks.d.ts +0 -19
- package/dist/test/mocks/shared.mocks.js +0 -29
- package/dist/test/mocks/shared.mocks.js.map +0 -1
- package/dist/test/modules/rate-limiting.module.d.ts +0 -4
- package/dist/test/modules/rate-limiting.module.js +0 -38
- package/dist/test/modules/rate-limiting.module.js.map +0 -1
- package/dist/test/modules/rule.module.d.ts +0 -5
- package/dist/test/modules/rule.module.js +0 -38
- package/dist/test/modules/rule.module.js.map +0 -1
- package/dist/test/rules/rules.service.spec.d.ts +0 -1
- package/dist/test/rules/rules.service.spec.js +0 -115
- package/dist/test/rules/rules.service.spec.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -1,15 +1,7 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.RuleService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
13
5
|
const logger_1 = require("@edirect/logger");
|
|
14
6
|
const common_1 = require("@nestjs/common");
|
|
15
7
|
const object_utils_1 = require("../object.utils");
|
|
@@ -61,7 +53,7 @@ let RuleService = class RuleService {
|
|
|
61
53
|
return this.repository.save(input);
|
|
62
54
|
}
|
|
63
55
|
catch (error) {
|
|
64
|
-
this.
|
|
56
|
+
this.logError(`[ERROR] error to create rate limiting `, error);
|
|
65
57
|
throw error;
|
|
66
58
|
}
|
|
67
59
|
}
|
|
@@ -70,7 +62,7 @@ let RuleService = class RuleService {
|
|
|
70
62
|
return this.repository.findAll(queryParameters);
|
|
71
63
|
}
|
|
72
64
|
catch (error) {
|
|
73
|
-
this.
|
|
65
|
+
this.logError('[ERROR] error to find rate limiting', error);
|
|
74
66
|
throw new common_1.InternalServerErrorException();
|
|
75
67
|
}
|
|
76
68
|
}
|
|
@@ -92,7 +84,7 @@ let RuleService = class RuleService {
|
|
|
92
84
|
return data;
|
|
93
85
|
}
|
|
94
86
|
catch (error) {
|
|
95
|
-
this.
|
|
87
|
+
this.logError('[ERROR] error to fnd rate limiting', error);
|
|
96
88
|
throw new common_1.InternalServerErrorException();
|
|
97
89
|
}
|
|
98
90
|
}
|
|
@@ -104,7 +96,7 @@ let RuleService = class RuleService {
|
|
|
104
96
|
return rate;
|
|
105
97
|
}
|
|
106
98
|
catch (error) {
|
|
107
|
-
this.
|
|
99
|
+
this.logError('[ERROR] error to find quote by ID', error);
|
|
108
100
|
throw error;
|
|
109
101
|
}
|
|
110
102
|
}
|
|
@@ -122,7 +114,7 @@ let RuleService = class RuleService {
|
|
|
122
114
|
partner: current?.partner || '',
|
|
123
115
|
provider: current?.provider || '',
|
|
124
116
|
productType: current?.productType || '',
|
|
125
|
-
market: current?.market || ''
|
|
117
|
+
market: current?.market || '',
|
|
126
118
|
});
|
|
127
119
|
if (cacheKey || cacheKey === '') {
|
|
128
120
|
const isDeleted = await this.cacheService.delete([cacheKey]);
|
|
@@ -133,7 +125,7 @@ let RuleService = class RuleService {
|
|
|
133
125
|
return this.repository.update(id, fieldsToUpdate);
|
|
134
126
|
}
|
|
135
127
|
catch (error) {
|
|
136
|
-
this.
|
|
128
|
+
this.logError(`[ERROR] error to update ${id}`, error);
|
|
137
129
|
throw error;
|
|
138
130
|
}
|
|
139
131
|
}
|
|
@@ -150,10 +142,13 @@ let RuleService = class RuleService {
|
|
|
150
142
|
});
|
|
151
143
|
}
|
|
152
144
|
catch (error) {
|
|
153
|
-
this.
|
|
145
|
+
this.logError(`[ERROR] Error to delete rule`, error);
|
|
154
146
|
throw error;
|
|
155
147
|
}
|
|
156
148
|
}
|
|
149
|
+
logError(message, error) {
|
|
150
|
+
this.logger.error(message, error instanceof Error ? error.stack || error.message : String(error));
|
|
151
|
+
}
|
|
157
152
|
validateRuleExpression(expression) {
|
|
158
153
|
if (expression && expression.length > this.MAX_EXPRESSION_LENGTH) {
|
|
159
154
|
return `Expression too long: ${expression.length} chars`;
|
|
@@ -174,7 +169,7 @@ let RuleService = class RuleService {
|
|
|
174
169
|
partner: queryParameters?.partner || '',
|
|
175
170
|
provider: queryParameters?.provider || '',
|
|
176
171
|
productType: queryParameters?.productType || '',
|
|
177
|
-
market: queryParameters?.market || ''
|
|
172
|
+
market: queryParameters?.market || '',
|
|
178
173
|
});
|
|
179
174
|
const cachedData = await this.cacheService.get(cacheKey);
|
|
180
175
|
if (cachedData && cachedData.length) {
|
|
@@ -193,18 +188,17 @@ let RuleService = class RuleService {
|
|
|
193
188
|
const orderedParams = Object.keys(parameters)
|
|
194
189
|
.sort()
|
|
195
190
|
.reduce((obj, key) => {
|
|
196
|
-
|
|
191
|
+
// Ensure all values are stringified for cache key
|
|
192
|
+
obj[key] = String(parameters[key]);
|
|
197
193
|
return obj;
|
|
198
194
|
}, {});
|
|
199
195
|
return `rate-limit-config:${JSON.stringify(orderedParams)}`;
|
|
200
196
|
}
|
|
201
|
-
;
|
|
202
197
|
};
|
|
203
198
|
exports.RuleService = RuleService;
|
|
204
|
-
exports.RuleService = RuleService = __decorate([
|
|
199
|
+
exports.RuleService = RuleService = tslib_1.__decorate([
|
|
205
200
|
(0, common_1.Injectable)(),
|
|
206
|
-
__metadata("design:paramtypes", [logger_1.LoggerService,
|
|
201
|
+
tslib_1.__metadata("design:paramtypes", [logger_1.LoggerService,
|
|
207
202
|
rule_repository_1.RuleRepository,
|
|
208
203
|
cache_service_1.CacheService])
|
|
209
204
|
], RuleService);
|
|
210
|
-
//# sourceMappingURL=rule.service.js.map
|
|
@@ -3,7 +3,8 @@ export declare class CacheService {
|
|
|
3
3
|
private readonly redis;
|
|
4
4
|
constructor(redis: RedisService);
|
|
5
5
|
get<T>(key: string): Promise<T | null>;
|
|
6
|
-
set(key: string, value:
|
|
6
|
+
set<T>(key: string, value: T, ttl?: number): Promise<void>;
|
|
7
7
|
delete(keys: string[]): Promise<number>;
|
|
8
8
|
deleteByPattern(pattern: string): Promise<number>;
|
|
9
9
|
}
|
|
10
|
+
//# sourceMappingURL=cache.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../../../src/shared/cache/cache.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,qBACa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAE1C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAI5C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGlD"}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.CacheService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
13
5
|
const common_1 = require("@nestjs/common");
|
|
14
6
|
const redis_service_1 = require("../redis/redis.service");
|
|
15
7
|
let CacheService = class CacheService {
|
|
@@ -31,8 +23,7 @@ let CacheService = class CacheService {
|
|
|
31
23
|
}
|
|
32
24
|
};
|
|
33
25
|
exports.CacheService = CacheService;
|
|
34
|
-
exports.CacheService = CacheService = __decorate([
|
|
26
|
+
exports.CacheService = CacheService = tslib_1.__decorate([
|
|
35
27
|
(0, common_1.Injectable)(),
|
|
36
|
-
__metadata("design:paramtypes", [redis_service_1.RedisService])
|
|
28
|
+
tslib_1.__metadata("design:paramtypes", [redis_service_1.RedisService])
|
|
37
29
|
], CacheService);
|
|
38
|
-
//# sourceMappingURL=cache.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl.interface.d.ts","sourceRoot":"","sources":["../../../../src/shared/dsl/dsl.interface.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAElD,UAAU,QAAQ,CAAC,CAAC,GAAG,SAAS;IAC9B,EAAE,EAAE,CAAC,CAAC;CACP;AAED,UAAU,QAAQ,CAAC,CAAC,GAAG,SAAS;IAC9B,EAAE,EAAE,CAAC,EAAE,CAAC;CACT;AAED,UAAU,WAAW,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM;IACrC,KAAK,EAAE;QACL,IAAI,CAAC,EAAE,CAAC,CAAC;QACT,EAAE,CAAC,EAAE,CAAC,CAAC;KACR,CAAC;CACH;AAED,UAAU,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM;IACnC,GAAG,EAAE,CAAC,CAAA;CACP;AAED,UAAU,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM;IACnC,GAAG,EAAE,CAAC,CAAA;CACP;AAED,UAAU,eAAe;IACvB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,KAAK,WAAW,GACZ,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,eAAe,GACf,SAAS,GACT,SAAS,CAAC;AAGd,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;IACjB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE,gBAAgB,CAAC;CACtB;AAED,oBAAY,gBAAgB;IAC1B,EAAE,OAAO;IACT,KAAK,UAAU;IACf,GAAG,QAAQ;CACZ"}
|
|
@@ -2,5 +2,6 @@ import { FilterDsl, IDslQueryItem } from './dsl.interface';
|
|
|
2
2
|
export declare class DslService {
|
|
3
3
|
#private;
|
|
4
4
|
static buildFilter: (query: IDslQueryItem[]) => FilterDsl;
|
|
5
|
-
static toMongoQuery: (filter: Record<string,
|
|
5
|
+
static toMongoQuery: (filter: Record<string, Record<string, unknown> | Array<Record<string, Record<string, unknown>>>>) => Record<string, unknown>;
|
|
6
6
|
}
|
|
7
|
+
//# sourceMappingURL=dsl.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl.service.d.ts","sourceRoot":"","sources":["../../../../src/shared/dsl/dsl.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE3D,qBAAa,UAAU;;IACrB,MAAM,CAAC,WAAW,GAAI,OAAO,aAAa,EAAE,KAAG,SAAS,CAWtD;IAEF,MAAM,CAAC,YAAY,GACjB,QAAQ,MAAM,CACZ,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CACzE,KACA,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuDxB;CAuBH"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DslService = void 0;
|
|
4
|
-
const
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
5
6
|
class DslService {
|
|
6
7
|
static buildFilter = (query) => {
|
|
7
8
|
return query.reduce((acc, cur) => {
|
|
@@ -19,33 +20,42 @@ class DslService {
|
|
|
19
20
|
for (const key in filter) {
|
|
20
21
|
const condition = filter[key];
|
|
21
22
|
if (key === 'or') {
|
|
22
|
-
query['$or'] = condition.map(
|
|
23
|
+
query['$or'] = condition.map(subCond => this.toMongoQuery(subCond));
|
|
23
24
|
continue;
|
|
24
25
|
}
|
|
25
|
-
if (condition.eq !== undefined) {
|
|
26
|
+
if ('eq' in condition && condition.eq !== undefined) {
|
|
26
27
|
query[key] = condition.eq;
|
|
27
28
|
}
|
|
28
|
-
if (condition.in) {
|
|
29
|
+
if ('in' in condition && condition.in !== undefined) {
|
|
29
30
|
query[key] = { $in: condition.in };
|
|
30
31
|
}
|
|
31
|
-
if (condition.range) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
if ('range' in condition && condition.range !== undefined) {
|
|
33
|
+
const rangeQuery = {};
|
|
34
|
+
const conditionRange = condition.range;
|
|
35
|
+
if (conditionRange.from)
|
|
36
|
+
rangeQuery['$gte'] = conditionRange.from;
|
|
37
|
+
if (conditionRange.to)
|
|
38
|
+
rangeQuery['$lte'] = conditionRange.to;
|
|
39
|
+
query[key] = rangeQuery;
|
|
37
40
|
}
|
|
38
|
-
if (condition
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
if ('gte' in condition) {
|
|
42
|
+
const gteQuery = {};
|
|
43
|
+
if (condition.gte !== undefined)
|
|
44
|
+
gteQuery['$gte'] = condition.gte;
|
|
45
|
+
query[key] = gteQuery;
|
|
41
46
|
}
|
|
42
|
-
if (condition
|
|
43
|
-
|
|
47
|
+
if ('lte' in condition) {
|
|
48
|
+
const lteQuery = {};
|
|
49
|
+
if (condition.lte !== undefined)
|
|
50
|
+
lteQuery['$lte'] = condition.lte;
|
|
51
|
+
query[key] = lteQuery;
|
|
44
52
|
}
|
|
45
|
-
if (condition
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
if ('elemMatch' in condition) {
|
|
54
|
+
const elemMatchQuery = {};
|
|
55
|
+
if (condition.elemMatch) {
|
|
56
|
+
elemMatchQuery['$elemMatch'] = this.toMongoQuery(condition.elemMatch);
|
|
57
|
+
query[key] = elemMatchQuery;
|
|
58
|
+
}
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
61
|
return query;
|
|
@@ -53,23 +63,23 @@ class DslService {
|
|
|
53
63
|
static #buildOp = (op, value) => {
|
|
54
64
|
if (op === 'rangeDate') {
|
|
55
65
|
const data = value;
|
|
56
|
-
return {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
to: data
|
|
60
|
-
}
|
|
66
|
+
return {
|
|
67
|
+
range: {
|
|
68
|
+
from: data?.from || (0, dayjs_1.default)().subtract(1, 'month').toDate(),
|
|
69
|
+
to: data?.to || new Date(),
|
|
70
|
+
},
|
|
71
|
+
};
|
|
61
72
|
}
|
|
62
73
|
if (op === 'range') {
|
|
63
74
|
const data = value;
|
|
64
75
|
return {
|
|
65
76
|
range: {
|
|
66
|
-
from: data
|
|
67
|
-
to: data
|
|
68
|
-
}
|
|
77
|
+
from: data?.from,
|
|
78
|
+
to: data?.to,
|
|
79
|
+
},
|
|
69
80
|
};
|
|
70
81
|
}
|
|
71
82
|
return { [op || 'eq']: value };
|
|
72
83
|
};
|
|
73
84
|
}
|
|
74
85
|
exports.DslService = DslService;
|
|
75
|
-
//# sourceMappingURL=dsl.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.module.d.ts","sourceRoot":"","sources":["../../../../src/shared/redis/redis.module.ts"],"names":[],"mappings":"AAKA,qBAoBa,WAAW;CAAG"}
|
|
@@ -1,20 +1,15 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
3
|
exports.RedisModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
10
5
|
const common_1 = require("@nestjs/common");
|
|
11
6
|
const config_1 = require("@nestjs/config");
|
|
12
|
-
const ioredis_1 = require("ioredis");
|
|
7
|
+
const ioredis_1 = tslib_1.__importDefault(require("ioredis"));
|
|
13
8
|
const redis_service_1 = require("./redis.service");
|
|
14
9
|
let RedisModule = class RedisModule {
|
|
15
10
|
};
|
|
16
11
|
exports.RedisModule = RedisModule;
|
|
17
|
-
exports.RedisModule = RedisModule = __decorate([
|
|
12
|
+
exports.RedisModule = RedisModule = tslib_1.__decorate([
|
|
18
13
|
(0, common_1.Global)(),
|
|
19
14
|
(0, common_1.Module)({
|
|
20
15
|
imports: [config_1.ConfigModule],
|
|
@@ -35,4 +30,3 @@ exports.RedisModule = RedisModule = __decorate([
|
|
|
35
30
|
exports: ['REDIS_CLIENT', redis_service_1.RedisService],
|
|
36
31
|
})
|
|
37
32
|
], RedisModule);
|
|
38
|
-
//# sourceMappingURL=redis.module.js.map
|
|
@@ -4,9 +4,10 @@ export declare class RedisService implements OnModuleDestroy {
|
|
|
4
4
|
private readonly client;
|
|
5
5
|
constructor(client: Redis);
|
|
6
6
|
get<T>(key: string): Promise<T | null>;
|
|
7
|
-
set(key: string, value:
|
|
7
|
+
set<T>(key: string, value: T, ttlSeconds?: number): Promise<void>;
|
|
8
8
|
delKeys(keys: string[]): Promise<number>;
|
|
9
9
|
scan(pattern: string, count?: number): Promise<string[]>;
|
|
10
10
|
deleteByPattern(pattern: string): Promise<number>;
|
|
11
11
|
onModuleDestroy(): void;
|
|
12
12
|
}
|
|
13
|
+
//# sourceMappingURL=redis.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.service.d.ts","sourceRoot":"","sources":["../../../../src/shared/redis/redis.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,qBACa,YAAa,YAAW,eAAe;IAGhD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,KAAK;IAG1B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKtC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBrD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvD,eAAe;CAGhB"}
|
|
@@ -1,20 +1,9 @@
|
|
|
1
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
3
|
exports.RedisService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
16
5
|
const common_1 = require("@nestjs/common");
|
|
17
|
-
const ioredis_1 = require("ioredis");
|
|
6
|
+
const ioredis_1 = tslib_1.__importDefault(require("ioredis"));
|
|
18
7
|
let RedisService = class RedisService {
|
|
19
8
|
client;
|
|
20
9
|
constructor(client) {
|
|
@@ -57,9 +46,8 @@ let RedisService = class RedisService {
|
|
|
57
46
|
}
|
|
58
47
|
};
|
|
59
48
|
exports.RedisService = RedisService;
|
|
60
|
-
exports.RedisService = RedisService = __decorate([
|
|
49
|
+
exports.RedisService = RedisService = tslib_1.__decorate([
|
|
61
50
|
(0, common_1.Injectable)(),
|
|
62
|
-
__param(0, (0, common_1.Inject)('REDIS_CLIENT')),
|
|
63
|
-
__metadata("design:paramtypes", [ioredis_1.default])
|
|
51
|
+
tslib_1.__param(0, (0, common_1.Inject)('REDIS_CLIENT')),
|
|
52
|
+
tslib_1.__metadata("design:paramtypes", [ioredis_1.default])
|
|
64
53
|
], RedisService);
|
|
65
|
-
//# sourceMappingURL=redis.service.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export interface IRuleFunction {
|
|
2
|
-
fn: (...args:
|
|
2
|
+
fn: (...args: unknown[]) => Promise<unknown>;
|
|
3
3
|
params: string[];
|
|
4
4
|
description: string;
|
|
5
5
|
name: string;
|
|
@@ -11,3 +11,4 @@ export interface RuleEngineInterface {
|
|
|
11
11
|
registerCustomFunctions(customFunctions: IRuleFunction[]): void;
|
|
12
12
|
validateExpressionVariables<T>(expression: string, context: T): Promise<string[]>;
|
|
13
13
|
}
|
|
14
|
+
//# sourceMappingURL=rule-engine.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-engine.interface.d.ts","sourceRoot":"","sources":["../../../../../src/shared/rule-engine/interface/rule-engine.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,uBAAuB,CAAC,eAAe,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAChE,2BAA2B,CAAC,CAAC,EAC3B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACtB"}
|
|
@@ -2,9 +2,10 @@ import { DynamicModule } from '@nestjs/common';
|
|
|
2
2
|
import { IRuleFunction } from './interface/rule-engine.interface';
|
|
3
3
|
export declare class RuleEngineModule {
|
|
4
4
|
static forFeatureAsync(options: {
|
|
5
|
-
useFactory: (...args:
|
|
6
|
-
inject?:
|
|
7
|
-
imports?:
|
|
5
|
+
useFactory: (...args: never[]) => Promise<IRuleFunction[]>;
|
|
6
|
+
inject?: never[];
|
|
7
|
+
imports?: never[];
|
|
8
8
|
}): DynamicModule;
|
|
9
9
|
static forFeature(functions: IRuleFunction[]): DynamicModule;
|
|
10
10
|
}
|
|
11
|
+
//# sourceMappingURL=rule-engine.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-engine.module.d.ts","sourceRoot":"","sources":["../../../../src/shared/rule-engine/rule-engine.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4B,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGlE,qBAEa,gBAAgB;IAC3B,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE;QAC9B,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;KACnB,GAAG,aAAa;IAuBjB,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,aAAa;CAkB7D"}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
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
2
|
var RuleEngineModule_1;
|
|
9
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
4
|
exports.RuleEngineModule = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
11
6
|
const common_1 = require("@nestjs/common");
|
|
12
|
-
const jexl_1 = require("jexl");
|
|
13
7
|
const index_1 = require("../../index");
|
|
14
8
|
const rule_engine_service_1 = require("./rule-engine.service");
|
|
15
9
|
let RuleEngineModule = RuleEngineModule_1 = class RuleEngineModule {
|
|
@@ -22,7 +16,7 @@ let RuleEngineModule = RuleEngineModule_1 = class RuleEngineModule {
|
|
|
22
16
|
const ruleEngineProvider = {
|
|
23
17
|
provide: index_1.RULE_ENGINE_INSTANCE,
|
|
24
18
|
useFactory: (fns) => {
|
|
25
|
-
return new rule_engine_service_1.RuleEngineService(
|
|
19
|
+
return new rule_engine_service_1.RuleEngineService(fns);
|
|
26
20
|
},
|
|
27
21
|
inject: [index_1.CUSTOM_RULE_FUNCTIONS],
|
|
28
22
|
};
|
|
@@ -40,7 +34,7 @@ let RuleEngineModule = RuleEngineModule_1 = class RuleEngineModule {
|
|
|
40
34
|
};
|
|
41
35
|
const ruleEngineProvider = {
|
|
42
36
|
provide: index_1.RULE_ENGINE_INSTANCE,
|
|
43
|
-
useFactory: (fns) => new rule_engine_service_1.RuleEngineService(
|
|
37
|
+
useFactory: (fns) => new rule_engine_service_1.RuleEngineService(fns),
|
|
44
38
|
inject: [index_1.CUSTOM_RULE_FUNCTIONS],
|
|
45
39
|
};
|
|
46
40
|
return {
|
|
@@ -51,8 +45,7 @@ let RuleEngineModule = RuleEngineModule_1 = class RuleEngineModule {
|
|
|
51
45
|
}
|
|
52
46
|
};
|
|
53
47
|
exports.RuleEngineModule = RuleEngineModule;
|
|
54
|
-
exports.RuleEngineModule = RuleEngineModule = RuleEngineModule_1 = __decorate([
|
|
48
|
+
exports.RuleEngineModule = RuleEngineModule = RuleEngineModule_1 = tslib_1.__decorate([
|
|
55
49
|
(0, common_1.Global)(),
|
|
56
50
|
(0, common_1.Module)({})
|
|
57
51
|
], RuleEngineModule);
|
|
58
|
-
//# sourceMappingURL=rule-engine.module.js.map
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { IRuleFunction } from
|
|
1
|
+
import { IRuleFunction } from './interface/rule-engine.interface';
|
|
2
2
|
export declare class RuleEngineService {
|
|
3
|
-
private readonly jexl;
|
|
4
3
|
private readonly fns;
|
|
4
|
+
private readonly jexl;
|
|
5
5
|
private readonly allowedFns;
|
|
6
|
-
constructor(
|
|
6
|
+
constructor(fns?: IRuleFunction[]);
|
|
7
7
|
evaluate<T>(expression: string, context: T): Promise<boolean>;
|
|
8
|
-
getResultCustomFunction(fnName:
|
|
8
|
+
getResultCustomFunction(fnName: string, context: Record<string, unknown>): Promise<unknown>;
|
|
9
9
|
validateExpressionVariables<T>(expression: string, context: T): Promise<string[]>;
|
|
10
|
-
validateFunctionsAreValid(expression:
|
|
11
|
-
getAllowedFunctions():
|
|
10
|
+
validateFunctionsAreValid(expression: string): string[];
|
|
11
|
+
getAllowedFunctions(): string[];
|
|
12
12
|
injectCustomFns(): void;
|
|
13
13
|
private _extractVariables;
|
|
14
14
|
private _validateVariablesInContext;
|
|
15
15
|
private _extractFunctionCalls;
|
|
16
16
|
private _resolveValue;
|
|
17
17
|
}
|
|
18
|
+
//# sourceMappingURL=rule-engine.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-engine.service.d.ts","sourceRoot":"","sources":["../../../../src/shared/rule-engine/rule-engine.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAEd,GAAG,GAAE,aAAa,EAAO;IAKhD,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB7D,uBAAuB,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC;IAWb,2BAA2B,CAAC,CAAC,EACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,MAAM,EAAE,CAAC;IASpB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBvD,mBAAmB,IAAI,MAAM,EAAE;IAI/B,eAAe,IAAI,IAAI;IAOvB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,2BAA2B;IAqCnC,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,aAAa;CAatB"}
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RuleEngineService = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
|
+
const jexl_1 = require("jexl");
|
|
5
6
|
class RuleEngineService {
|
|
6
|
-
jexl;
|
|
7
7
|
fns;
|
|
8
|
+
jexl;
|
|
8
9
|
allowedFns = [];
|
|
9
|
-
constructor(
|
|
10
|
-
this.jexl = jexl;
|
|
10
|
+
constructor(fns = []) {
|
|
11
11
|
this.fns = fns;
|
|
12
|
+
this.jexl = new jexl_1.Jexl();
|
|
12
13
|
this.injectCustomFns();
|
|
13
14
|
}
|
|
14
15
|
async evaluate(expression, context) {
|
|
@@ -17,11 +18,11 @@ class RuleEngineService {
|
|
|
17
18
|
for (const call of functionCalls) {
|
|
18
19
|
const { name, rawArgs, fullText } = call;
|
|
19
20
|
if (this.fns && this.fns.length) {
|
|
20
|
-
const rule = this.fns.find(
|
|
21
|
+
const rule = this.fns.find(fn => fn.name === name);
|
|
21
22
|
if (!rule || !rule.fn)
|
|
22
23
|
throw new common_1.BadRequestException(`Not known'${name}' function`);
|
|
23
24
|
const args = rawArgs.map(arg => this._resolveValue(arg, context));
|
|
24
|
-
const result = await rule.fn(...args) || 0;
|
|
25
|
+
const result = (await rule.fn(...args)) || 0;
|
|
25
26
|
expression = expression.replace(fullText, JSON.stringify(result));
|
|
26
27
|
}
|
|
27
28
|
}
|
|
@@ -29,11 +30,11 @@ class RuleEngineService {
|
|
|
29
30
|
}
|
|
30
31
|
async getResultCustomFunction(fnName, context) {
|
|
31
32
|
const fns = this._extractFunctionCalls(fnName);
|
|
32
|
-
if (!fns
|
|
33
|
+
if (!fns || !fns.length)
|
|
33
34
|
return;
|
|
34
35
|
const { name, rawArgs } = fns[0];
|
|
35
36
|
const args = rawArgs.map(arg => this._resolveValue(arg, context));
|
|
36
|
-
const func = this.fns.find(
|
|
37
|
+
const func = this.fns.find(fn => fn.name === name);
|
|
37
38
|
if (!func)
|
|
38
39
|
return;
|
|
39
40
|
return func.fn(...args) || 0;
|
|
@@ -50,8 +51,8 @@ class RuleEngineService {
|
|
|
50
51
|
return [];
|
|
51
52
|
const usedFunctions = [
|
|
52
53
|
...expression.matchAll(/([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/g),
|
|
53
|
-
].map(
|
|
54
|
-
const invalidFunctions = usedFunctions.filter(
|
|
54
|
+
].map(match => match[1]);
|
|
55
|
+
const invalidFunctions = usedFunctions.filter(fn => !this.allowedFns.includes(fn));
|
|
55
56
|
return invalidFunctions;
|
|
56
57
|
}
|
|
57
58
|
getAllowedFunctions() {
|
|
@@ -72,7 +73,7 @@ class RuleEngineService {
|
|
|
72
73
|
functionNames.push(match[0].replace('(', '').trim());
|
|
73
74
|
}
|
|
74
75
|
const allMatches = expression.match(regex) || [];
|
|
75
|
-
const variables = allMatches.filter(
|
|
76
|
+
const variables = allMatches.filter(variable => {
|
|
76
77
|
if (functionNames.includes(variable))
|
|
77
78
|
return false;
|
|
78
79
|
return true;
|
|
@@ -125,8 +126,9 @@ class RuleEngineService {
|
|
|
125
126
|
}
|
|
126
127
|
_resolveValue(path, context) {
|
|
127
128
|
const parts = path.match(/[^.[\]]+/g);
|
|
128
|
-
return parts?.reduce((obj, key) => obj
|
|
129
|
+
return parts?.reduce((obj, key) => obj && typeof obj === 'object'
|
|
130
|
+
? obj[key]
|
|
131
|
+
: undefined, context);
|
|
129
132
|
}
|
|
130
133
|
}
|
|
131
134
|
exports.RuleEngineService = RuleEngineService;
|
|
132
|
-
//# sourceMappingURL=rule-engine.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.module.d.ts","sourceRoot":"","sources":["../../../src/shared/shared.module.ts"],"names":[],"mappings":"AAOA,qBAca,YAAY;CAAG"}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
3
|
exports.SharedModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
10
5
|
const cache_manager_1 = require("@nestjs/cache-manager");
|
|
11
6
|
const common_1 = require("@nestjs/common");
|
|
12
7
|
const cache_manager_redis_store_1 = require("cache-manager-redis-store");
|
|
@@ -16,7 +11,7 @@ const rule_engine_service_1 = require("./rule-engine/rule-engine.service");
|
|
|
16
11
|
let SharedModule = class SharedModule {
|
|
17
12
|
};
|
|
18
13
|
exports.SharedModule = SharedModule;
|
|
19
|
-
exports.SharedModule = SharedModule = __decorate([
|
|
14
|
+
exports.SharedModule = SharedModule = tslib_1.__decorate([
|
|
20
15
|
(0, common_1.Module)({
|
|
21
16
|
imports: [
|
|
22
17
|
cache_manager_1.CacheModule.registerAsync({
|
|
@@ -32,4 +27,3 @@ exports.SharedModule = SharedModule = __decorate([
|
|
|
32
27
|
exports: [cache_service_1.CacheService, rule_engine_service_1.RuleEngineService]
|
|
33
28
|
})
|
|
34
29
|
], SharedModule);
|
|
35
|
-
//# sourceMappingURL=shared.module.js.map
|
|
@@ -4,6 +4,7 @@ export declare class IsValidExpressionConstraint implements ValidatorConstraintI
|
|
|
4
4
|
private readonly ruleService;
|
|
5
5
|
private errorMessage;
|
|
6
6
|
constructor(ruleService: RuleService);
|
|
7
|
-
validate(value: string,
|
|
8
|
-
defaultMessage(
|
|
7
|
+
validate(value: string, _args: ValidationArguments): boolean;
|
|
8
|
+
defaultMessage(_args: ValidationArguments): string;
|
|
9
9
|
}
|
|
10
|
+
//# sourceMappingURL=rule.constraint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule.constraint.d.ts","sourceRoot":"","sources":["../../../src/validators/rule.constraint.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EAEnB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,qBAEa,2BAA4B,YAAW,4BAA4B;IAElE,OAAO,CAAC,QAAQ,CAAC,WAAW;IADxC,OAAO,CAAC,YAAY,CAAwB;gBACf,WAAW,EAAE,WAAW;IAErD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO;IA6B5D,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM;CAGnD"}
|