@edirect/rate-limit-module 1.0.9 → 2.0.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.
@@ -0,0 +1,42 @@
1
+ type Primitive = string | number | boolean | Date;
2
+ interface EqFilter<T = Primitive> {
3
+ eq: T;
4
+ }
5
+ interface InFilter<T = Primitive> {
6
+ in: T[];
7
+ }
8
+ interface RangeFilter<T = Date | number> {
9
+ range: {
10
+ from?: T;
11
+ to?: T;
12
+ };
13
+ }
14
+ interface GteFilter<T = Date | number> {
15
+ gte: T;
16
+ }
17
+ interface LteFilter<T = Date | number> {
18
+ lte: T;
19
+ }
20
+ interface ElemMatchFilter {
21
+ elemMatch: FilterDsl;
22
+ }
23
+ type FieldFilter = EqFilter | InFilter | RangeFilter | ElemMatchFilter | LteFilter | GteFilter;
24
+ export interface FilterDsl {
25
+ or?: FilterDsl[];
26
+ [field: string]: FieldFilter | FilterDsl[] | undefined;
27
+ }
28
+ export interface IDslQuery {
29
+ fnContext: string;
30
+ query: IDslQueryItem[];
31
+ }
32
+ export interface IDslQueryItem {
33
+ label: string;
34
+ value: unknown;
35
+ op: OperationDslEnum;
36
+ }
37
+ export declare enum OperationDslEnum {
38
+ EQ = "eq",
39
+ RANGE = "range",
40
+ GTE = "gte"
41
+ }
42
+ export {};
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationDslEnum = void 0;
4
+ var OperationDslEnum;
5
+ (function (OperationDslEnum) {
6
+ OperationDslEnum["EQ"] = "eq";
7
+ OperationDslEnum["RANGE"] = "range";
8
+ OperationDslEnum["GTE"] = "gte";
9
+ })(OperationDslEnum || (exports.OperationDslEnum = OperationDslEnum = {}));
10
+ //# sourceMappingURL=dsl.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsl.interface.js","sourceRoot":"","sources":["../../../../src/shared/dsl/dsl.interface.ts"],"names":[],"mappings":";;;AAsDA,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,6BAAS,CAAA;IACT,mCAAe,CAAA;IACf,+BAAW,CAAA;AACb,CAAC,EAJW,gBAAgB,gCAAhB,gBAAgB,QAI3B"}
@@ -0,0 +1,6 @@
1
+ import { FilterDsl, IDslQueryItem } from './dsl.interface';
2
+ export declare class DslService {
3
+ #private;
4
+ static buildFilter: (query: IDslQueryItem[]) => FilterDsl;
5
+ static toMongoQuery: (filter: Record<string, any>) => Record<string, any>;
6
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DslService = void 0;
4
+ const dayjs_1 = require("dayjs");
5
+ class DslService {
6
+ static buildFilter = (query) => {
7
+ return query.reduce((acc, cur) => {
8
+ if (!cur || (!cur.label && !cur.value))
9
+ return acc;
10
+ return {
11
+ ...acc,
12
+ [cur.label]: this.#buildOp(cur.op, cur.value),
13
+ };
14
+ }, {});
15
+ };
16
+ static toMongoQuery = (filter) => {
17
+ const query = {};
18
+ for (const key in filter) {
19
+ const condition = filter[key];
20
+ if (key === 'or') {
21
+ query['$or'] = condition.map((subCond) => this.toMongoQuery(subCond));
22
+ continue;
23
+ }
24
+ if (condition.eq !== undefined) {
25
+ query[key] = condition.eq;
26
+ }
27
+ if (condition.in) {
28
+ query[key] = { $in: condition.in };
29
+ }
30
+ if (condition.range) {
31
+ query[key] = {};
32
+ if (condition.range.from)
33
+ query[key]['$gte'] = condition.range.from;
34
+ if (condition.range.to)
35
+ query[key]['$lte'] = condition.range.to;
36
+ }
37
+ if (condition.gte) {
38
+ query[key] = {};
39
+ query[key]['$gte'] = condition.gte;
40
+ }
41
+ if (condition.lte) {
42
+ query[key]['$lte'] = condition.lte;
43
+ }
44
+ if (condition.elemMatch) {
45
+ query[key] = {
46
+ $elemMatch: this.toMongoQuery(condition.elemMatch),
47
+ };
48
+ }
49
+ }
50
+ return query;
51
+ };
52
+ static #buildOp = (op, value) => {
53
+ if (op === 'rangeDate') {
54
+ const data = value;
55
+ return { range: {
56
+ from: data.from ||
57
+ (0, dayjs_1.default)().subtract(1, 'month').toDate(),
58
+ to: data.to || new Date(),
59
+ } };
60
+ }
61
+ if (op === 'range') {
62
+ const data = value;
63
+ return {
64
+ range: {
65
+ from: data.from,
66
+ to: data.to,
67
+ }
68
+ };
69
+ }
70
+ return { [op || 'eq']: value };
71
+ };
72
+ }
73
+ exports.DslService = DslService;
74
+ //# sourceMappingURL=dsl.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsl.service.js","sourceRoot":"","sources":["../../../../src/shared/dsl/dsl.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { FilterDsl, IDlsQueryItem } from './dsl.interface';
2
+ export declare const buildDlsFilter: (query: IDlsQueryItem[]) => FilterDsl;
3
+ export declare const dslToMongoQuery: (filter: Record<string, any>) => Record<string, any>;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dslToMongoQuery = exports.buildDlsFilter = void 0;
4
+ const dayjs_1 = require("dayjs");
5
+ const buildDlsFilter = (query) => {
6
+ return query.reduce((acc, cur) => {
7
+ if (!cur || (!cur.label && !cur.value))
8
+ return acc;
9
+ return {
10
+ ...acc,
11
+ [cur.label]: buildDlsOp(cur.op, cur.value),
12
+ };
13
+ }, {});
14
+ };
15
+ exports.buildDlsFilter = buildDlsFilter;
16
+ const buildDlsOp = (op, value) => {
17
+ if (op === 'rangeDate') {
18
+ const data = value;
19
+ return { range: {
20
+ from: data.from ||
21
+ (0, dayjs_1.default)().subtract(1, 'month').toDate(),
22
+ to: data.to || new Date(),
23
+ } };
24
+ }
25
+ if (op === 'range') {
26
+ const data = value;
27
+ return {
28
+ range: {
29
+ from: data.from,
30
+ to: data.to,
31
+ }
32
+ };
33
+ }
34
+ return { [op || 'eq']: value };
35
+ };
36
+ const dslToMongoQuery = (filter) => {
37
+ const query = {};
38
+ for (const key in filter) {
39
+ const condition = filter[key];
40
+ if (key === 'or') {
41
+ query['$or'] = condition.map((subCond) => (0, exports.dslToMongoQuery)(subCond));
42
+ continue;
43
+ }
44
+ if (condition.eq !== undefined) {
45
+ query[key] = condition.eq;
46
+ }
47
+ if (condition.in) {
48
+ query[key] = { $in: condition.in };
49
+ }
50
+ if (condition.range) {
51
+ query[key] = {};
52
+ if (condition.range.from)
53
+ query[key]['$gte'] = condition.range.from;
54
+ if (condition.range.to)
55
+ query[key]['$lte'] = condition.range.to;
56
+ }
57
+ if (condition.gte) {
58
+ query[key] = {};
59
+ query[key]['$gte'] = condition.gte;
60
+ }
61
+ if (condition.lte) {
62
+ query[key]['$lte'] = condition.lte;
63
+ }
64
+ if (condition.elemMatch) {
65
+ query[key] = {
66
+ $elemMatch: (0, exports.dslToMongoQuery)(condition.elemMatch),
67
+ };
68
+ }
69
+ }
70
+ return query;
71
+ };
72
+ exports.dslToMongoQuery = dslToMongoQuery;
73
+ //# sourceMappingURL=dsl.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsl.utils.js","sourceRoot":"","sources":["../../../../src/shared/dsl/dsl.utils.ts"],"names":[],"mappings":";;;AAAA,iCAA0B;AAGnB,MAAM,cAAc,GAAG,CAAC,KAAsB,EAAa,EAAE;IAClE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/B,IAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAElD,OAAO;YACL,GAAG,GAAG;YACN,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC;SAC3C,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAA;AATY,QAAA,cAAc,kBAS1B;AAED,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,KAAc,EAAE,EAAE;IAChD,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,KAAY,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE;gBACd,IAAI,EACD,IAAI,CAAC,IAAwB;oBAC9B,IAAA,eAAK,GAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;gBACvC,EAAE,EAAG,IAAI,CAAC,EAAsB,IAAI,IAAI,IAAI,EAAE;aAC/C,EAAC,CAAA;IACJ,CAAC;IAED,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,KAAY,CAAC;QAC1B,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ;SACF,CAAA;IACH,CAAC;IAED,OAAO,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAA;AAChC,CAAC,CAAA;AAEM,MAAM,eAAe,GAAG,CAAC,MAA2B,EAAuB,EAAE;IAClF,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAE9B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACvC,IAAA,uBAAe,EAAC,OAAO,CAAC,CACzB,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC/B,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;YACjB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAChB,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;YACpE,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,CAAC;QAED,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;QACrC,CAAC;QAED,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;QACrC,CAAC;QAED,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,GAAG;gBACX,UAAU,EAAE,IAAA,uBAAe,EAAC,SAAS,CAAC,SAAS,CAAC;aACjD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAA;AA3CY,QAAA,eAAe,mBA2C3B"}