@recursyve/nestjs-data-filter 9.3.2 → 9.3.3

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.
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DateTimeFilter = void 0;
4
+ const date_fns_1 = require("date-fns");
4
5
  const operators_1 = require("../operators");
5
6
  const type_1 = require("../type");
6
7
  const filter_1 = require("./filter");
7
- const moment = require("moment");
8
8
  // Filters a row by exact date and time given in the rules.
9
- // TODO: Do not hard code timezone offset
10
9
  class DateTimeFilter extends filter_1.Filter {
11
10
  constructor(definition) {
12
11
  super(definition);
@@ -18,24 +17,18 @@ class DateTimeFilter extends filter_1.Filter {
18
17
  return super.getWhereOptions({
19
18
  ...rule,
20
19
  value: [
21
- moment(rule.value[0])
22
- .utcOffset(-5, true)
23
- .format(),
24
- moment(rule.value[1])
25
- .utcOffset(-5, true)
26
- .format()
20
+ (0, date_fns_1.format)((0, date_fns_1.parseJSON)(rule.value[0]), "yyyy-MM-dd HH:mm:ss"),
21
+ (0, date_fns_1.format)((0, date_fns_1.parseJSON)(rule.value[1]), "yyyy-MM-dd HH:mm:ss")
27
22
  ]
28
23
  });
29
24
  }
30
25
  return super.getWhereOptions({
31
26
  operation: rule.operation,
32
- value: moment(rule.value)
33
- .utcOffset(-5, true)
34
- .format(),
27
+ value: (0, date_fns_1.format)((0, date_fns_1.parseJSON)(rule.value), "yyyy-MM-dd HH:mm:ss"),
35
28
  id: rule.id
36
29
  });
37
30
  }
38
31
  }
39
32
  exports.DateTimeFilter = DateTimeFilter;
40
33
 
41
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLXRpbWUuZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDRDQUFrRTtBQUNsRSxrQ0FBcUM7QUFDckMscUNBQXdEO0FBQ3hELGlDQUFpQztBQUVqQywyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLE1BQWEsY0FBZSxTQUFRLGVBQU07SUFJdEMsWUFBWSxVQUFnQztRQUN4QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFKZixTQUFJLEdBQUcsaUJBQVUsQ0FBQyxRQUFRLENBQUM7UUFDM0IsY0FBUyxHQUFHLENBQUMsR0FBRyx5QkFBYSxDQUFDLENBQUM7SUFJdEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFVBQVUsRUFBRTtZQUNyRyxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQ3pCLEdBQUcsSUFBSTtnQkFDUCxLQUFLLEVBQUU7b0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2hCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7eUJBQ25CLE1BQU0sRUFBRTtvQkFDYixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDaEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzt5QkFDbkIsTUFBTSxFQUFFO2lCQUNoQjthQUNKLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3BCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7aUJBQ25CLE1BQU0sRUFBRTtZQUNiLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNkLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQS9CRCx3Q0ErQkMiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL2RhdGUtdGltZS5maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IERhdGVPcGVyYXRvcnMsIEZpbHRlck9wZXJhdG9yVHlwZXMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXJEZWZpbml0aW9uLCBGaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJcIjtcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5cbi8vIEZpbHRlcnMgYSByb3cgYnkgZXhhY3QgZGF0ZSBhbmQgdGltZSBnaXZlbiBpbiB0aGUgcnVsZXMuXG4vLyBUT0RPOiBEbyBub3QgaGFyZCBjb2RlIHRpbWV6b25lIG9mZnNldFxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRmlsdGVyIGV4dGVuZHMgRmlsdGVyIHtcbiAgICBwdWJsaWMgdHlwZSA9IEZpbHRlclR5cGUuRGF0ZVRpbWU7XG4gICAgcHVibGljIG9wZXJhdG9ycyA9IFsuLi5EYXRlT3BlcmF0b3JzXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIHN1cGVyKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQmV0d2VlbiB8fCBydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RCZXR3ZWVuKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAuLi5ydWxlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIG1vbWVudChydWxlLnZhbHVlWzBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnV0Y09mZnNldCgtNSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoKSxcbiAgICAgICAgICAgICAgICAgICAgbW9tZW50KHJ1bGUudmFsdWVbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAudXRjT2Zmc2V0KC01LCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24sXG4gICAgICAgICAgICB2YWx1ZTogbW9tZW50KHJ1bGUudmFsdWUpXG4gICAgICAgICAgICAgICAgLnV0Y09mZnNldCgtNSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAuZm9ybWF0KCksXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLXRpbWUuZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUE2QztBQUc3Qyw0Q0FBa0U7QUFDbEUsa0NBQXFDO0FBQ3JDLHFDQUF3RDtBQUV4RCwyREFBMkQ7QUFDM0QsTUFBYSxjQUFlLFNBQVEsZUFBTTtJQUl0QyxZQUFZLFVBQWdDO1FBQ3hDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUpmLFNBQUksR0FBRyxpQkFBVSxDQUFDLFFBQVEsQ0FBQztRQUMzQixjQUFTLEdBQUcsQ0FBQyxHQUFHLHlCQUFhLENBQUMsQ0FBQztJQUl0QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFvQjtRQUM3QyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsVUFBVSxFQUFFO1lBQ3JHLE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDekIsR0FBRyxJQUFJO2dCQUNQLEtBQUssRUFBRTtvQkFDSCxJQUFBLGlCQUFNLEVBQUMsSUFBQSxvQkFBUyxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQztvQkFDdkQsSUFBQSxpQkFBTSxFQUFDLElBQUEsb0JBQVMsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLENBQUM7aUJBQzFEO2FBQ0osQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLEtBQUssRUFBRSxJQUFBLGlCQUFNLEVBQUMsSUFBQSxvQkFBUyxFQUFDLElBQUksQ0FBQyxLQUFZLENBQUMsRUFBRSxxQkFBcUIsQ0FBQztZQUNsRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUF6QkQsd0NBeUJDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9kYXRlLXRpbWUuZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0LCBwYXJzZUpTT04gfSBmcm9tIFwiZGF0ZS1mbnNcIjtcbmltcG9ydCB7IFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgRGF0ZU9wZXJhdG9ycywgRmlsdGVyT3BlcmF0b3JUeXBlcyB9IGZyb20gXCIuLi9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tIFwiLi4vdHlwZVwiO1xuaW1wb3J0IHsgQmFzZUZpbHRlckRlZmluaXRpb24sIEZpbHRlciB9IGZyb20gXCIuL2ZpbHRlclwiO1xuXG4vLyBGaWx0ZXJzIGEgcm93IGJ5IGV4YWN0IGRhdGUgYW5kIHRpbWUgZ2l2ZW4gaW4gdGhlIHJ1bGVzLlxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRmlsdGVyIGV4dGVuZHMgRmlsdGVyIHtcbiAgICBwdWJsaWMgdHlwZSA9IEZpbHRlclR5cGUuRGF0ZVRpbWU7XG4gICAgcHVibGljIG9wZXJhdG9ycyA9IFsuLi5EYXRlT3BlcmF0b3JzXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIHN1cGVyKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQmV0d2VlbiB8fCBydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RCZXR3ZWVuKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAuLi5ydWxlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdChwYXJzZUpTT04ocnVsZS52YWx1ZVswXSksIFwieXl5eS1NTS1kZCBISDptbTpzc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0KHBhcnNlSlNPTihydWxlLnZhbHVlWzFdKSwgXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXCIpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24sXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0KHBhcnNlSlNPTihydWxlLnZhbHVlIGFzIGFueSksIFwieXl5eS1NTS1kZCBISDptbTpzc1wiKSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,46 @@
1
+ import { WhereOptions } from "sequelize";
2
+ import { PathModel } from "../../models/path.model";
3
+ import { DataFilterUserModel } from "../../models/user.model";
4
+ import { QueryRuleModel } from "../models";
5
+ import { FilterBaseConfigurationModel } from "../models/filter-configuration.model";
6
+ import { FilterOperatorTypes } from "../operators";
7
+ import { FilterType } from "../type";
8
+ import { BaseFilterDefinition, Filter, FilterCondition } from "./filter";
9
+ export interface OptionsFilterOption {
10
+ key: string;
11
+ value?: unknown;
12
+ operator?: FilterOperatorTypes;
13
+ condition?: FilterCondition;
14
+ }
15
+ export type OptionsFilterSelectionMode = "radio" | "select";
16
+ export interface OptionsFilterDefinition {
17
+ selectionMode: OptionsFilterSelectionMode;
18
+ options: OptionsFilterOption[];
19
+ }
20
+ export interface OptionsFilterOptionConfiguration {
21
+ key: string;
22
+ name?: string;
23
+ }
24
+ export interface OptionsFilterConfigurationModel extends FilterBaseConfigurationModel {
25
+ selectionMode: OptionsFilterSelectionMode;
26
+ options: OptionsFilterOptionConfiguration[];
27
+ }
28
+ export declare class OptionsFilter extends Filter implements OptionsFilterDefinition {
29
+ type: FilterType;
30
+ operators: FilterOperatorTypes[];
31
+ selectionMode: OptionsFilterSelectionMode;
32
+ options: OptionsFilterOption[];
33
+ constructor(definition: BaseFilterDefinition & OptionsFilterDefinition);
34
+ getConfig<Request>(key: string, request: Request, user?: DataFilterUserModel): Promise<OptionsFilterConfigurationModel | null>;
35
+ getIncludePaths(rule: QueryRuleModel, data?: object): PathModel[];
36
+ getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
37
+ getHavingOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
38
+ private getRulePaths;
39
+ }
40
+ /**
41
+ * @deprecated: Use OptionsFilter instead
42
+ */
43
+ export declare class RadioFilter extends OptionsFilter {
44
+ type: FilterType;
45
+ constructor(definition: BaseFilterDefinition & Omit<OptionsFilterDefinition, "selectionMode">);
46
+ }
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RadioFilter = exports.OptionsFilter = void 0;
4
+ const sequelize_1 = require("sequelize");
5
+ const filter_utils_1 = require("../filter.utils");
6
+ const operators_1 = require("../operators");
7
+ const type_1 = require("../type");
8
+ const filter_1 = require("./filter");
9
+ class OptionsFilter extends filter_1.Filter {
10
+ constructor(definition) {
11
+ super(definition);
12
+ this.type = type_1.FilterType.Options;
13
+ this.operators = [operators_1.FilterOperatorTypes.Equal];
14
+ }
15
+ async getConfig(key, request, user) {
16
+ const config = await super.getConfig(key, request, user);
17
+ if (!config) {
18
+ return null;
19
+ }
20
+ return {
21
+ ...config,
22
+ selectionMode: this.selectionMode,
23
+ options: await Promise.all(this.options.map(async (x) => {
24
+ var _a;
25
+ return ({
26
+ key: x.key,
27
+ name: await this._translateService.getTranslation((_a = user === null || user === void 0 ? void 0 : user.language) !== null && _a !== void 0 ? _a : "", filter_utils_1.FilterUtils.getRadioOptionTranslationKey(key, x.key))
28
+ });
29
+ }))
30
+ };
31
+ }
32
+ getIncludePaths(rule, data) {
33
+ const option = this.options.find(x => x.key === rule.value);
34
+ const condition = option === null || option === void 0 ? void 0 : option.condition;
35
+ if (!condition) {
36
+ return super.getIncludePaths(rule);
37
+ }
38
+ return this.getRulePaths(condition.rules, data);
39
+ }
40
+ async getWhereOptions(rule) {
41
+ const option = this.options.find(x => x.key === rule.value);
42
+ if (!option) {
43
+ return super.getWhereOptions(rule);
44
+ }
45
+ if (!option.condition) {
46
+ return super.getWhereOptions({
47
+ ...rule,
48
+ value: option.value,
49
+ operation: option.operator || rule.operation
50
+ });
51
+ }
52
+ const conditions = [];
53
+ const where = option.condition.condition === "and" ? { [sequelize_1.Op.and]: conditions } : { [sequelize_1.Op.or]: conditions };
54
+ this.generateRuleWhereOptions(option.condition, conditions, rule);
55
+ conditions.push(await super.getWhereOptions({
56
+ ...rule,
57
+ value: option.value,
58
+ operation: option.operator || rule.operation
59
+ }));
60
+ return where;
61
+ }
62
+ async getHavingOptions(rule) {
63
+ var _a;
64
+ const option = this.options.find(x => x.key === rule.value);
65
+ if (!option) {
66
+ return super.getHavingOptions(rule);
67
+ }
68
+ return super.getHavingOptions({
69
+ ...rule,
70
+ value: option.value,
71
+ operation: (_a = option.operator) !== null && _a !== void 0 ? _a : rule.operation
72
+ });
73
+ }
74
+ getRulePaths(rules, data) {
75
+ const paths = [];
76
+ for (const rule of rules) {
77
+ if (rule.rules) {
78
+ paths.push(...this.getRulePaths(rule.rules, data));
79
+ }
80
+ else if (rule.path) {
81
+ if (paths.every((path) => path.path !== rule.path)) {
82
+ const r = rule;
83
+ if (!r.path) {
84
+ continue;
85
+ }
86
+ paths.push({
87
+ path: r.path,
88
+ where: filter_utils_1.FilterUtils.generateWhereConditions(r.where, data)
89
+ });
90
+ }
91
+ }
92
+ }
93
+ return paths;
94
+ }
95
+ }
96
+ exports.OptionsFilter = OptionsFilter;
97
+ /**
98
+ * @deprecated: Use OptionsFilter instead
99
+ */
100
+ class RadioFilter extends OptionsFilter {
101
+ constructor(definition) {
102
+ super({
103
+ ...definition,
104
+ selectionMode: "radio"
105
+ });
106
+ this.type = type_1.FilterType.Radio;
107
+ }
108
+ }
109
+ exports.RadioFilter = RadioFilter;
110
+
111
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9vcHRpb25zLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkM7QUFHN0Msa0RBQThDO0FBRzlDLDRDQUFtRDtBQUNuRCxrQ0FBcUM7QUFDckMscUNBQThGO0FBMEI5RixNQUFhLGFBQWMsU0FBUSxlQUFNO0lBTXJDLFlBQVksVUFBMEQ7UUFDbEUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBTmYsU0FBSSxHQUFHLGlCQUFVLENBQUMsT0FBTyxDQUFDO1FBQzFCLGNBQVMsR0FBRyxDQUFDLCtCQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBTS9DLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFVLEdBQVcsRUFBRSxPQUFnQixFQUFFLElBQTBCO1FBQ3JGLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTztZQUNILEdBQUcsTUFBTTtZQUNULGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBRTs7Z0JBQUMsT0FBQSxDQUFDO29CQUNwRCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7b0JBQ1YsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FDN0MsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxtQ0FBSSxFQUFFLEVBQ3BCLDBCQUFXLENBQUMsNEJBQTRCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkQ7aUJBQ0osQ0FBQyxDQUFBO2FB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LEtBQUssRUFBRTtnQkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUUsSUFBd0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMzRTtpQkFBTSxJQUFLLElBQTRCLENBQUMsSUFBSSxFQUFFO2dCQUMzQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQU0sSUFBNEIsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDekUsTUFBTSxDQUFDLEdBQUcsSUFBMkIsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7d0JBQ1QsU0FBUztxQkFDWjtvQkFFRCxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUNQLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTt3QkFDWixLQUFLLEVBQUUsMEJBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztxQkFDNUQsQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQXZHRCxzQ0F1R0M7QUFFRDs7R0FFRztBQUNILE1BQWEsV0FBWSxTQUFRLGFBQWE7SUFHMUMsWUFBWSxVQUFpRjtRQUN6RixLQUFLLENBQUM7WUFDRixHQUFHLFVBQVU7WUFDYixhQUFhLEVBQUUsT0FBTztTQUN6QixDQUFDLENBQUM7UUFOQSxTQUFJLEdBQUcsaUJBQVUsQ0FBQyxLQUFLLENBQUM7SUFPL0IsQ0FBQztDQUNKO0FBVEQsa0NBU0MiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL29wdGlvbnMuZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3AsIFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyVXRpbHMgfSBmcm9tIFwiLi4vZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQgeyBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IEZpbHRlckJhc2VDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJPcGVyYXRvclR5cGVzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyLCBGaWx0ZXJDb25kaXRpb24sIEZpbHRlckNvbmRpdGlvblJ1bGUgfSBmcm9tIFwiLi9maWx0ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zRmlsdGVyT3B0aW9uIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZT86IHVua25vd247XG4gICAgb3BlcmF0b3I/OiBGaWx0ZXJPcGVyYXRvclR5cGVzO1xuICAgIGNvbmRpdGlvbj86IEZpbHRlckNvbmRpdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgT3B0aW9uc0ZpbHRlclNlbGVjdGlvbk1vZGUgPSBcInJhZGlvXCIgfCBcInNlbGVjdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBzZWxlY3Rpb25Nb2RlOiBPcHRpb25zRmlsdGVyU2VsZWN0aW9uTW9kZTtcbiAgICBvcHRpb25zOiBPcHRpb25zRmlsdGVyT3B0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc0ZpbHRlck9wdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAgIGtleTogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc0ZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbCBleHRlbmRzIEZpbHRlckJhc2VDb25maWd1cmF0aW9uTW9kZWwge1xuICAgIHNlbGVjdGlvbk1vZGU6IE9wdGlvbnNGaWx0ZXJTZWxlY3Rpb25Nb2RlO1xuICAgIG9wdGlvbnM6IE9wdGlvbnNGaWx0ZXJPcHRpb25Db25maWd1cmF0aW9uW107XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpb25zRmlsdGVyIGV4dGVuZHMgRmlsdGVyIGltcGxlbWVudHMgT3B0aW9uc0ZpbHRlckRlZmluaXRpb24ge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5PcHRpb25zO1xuICAgIHB1YmxpYyBvcGVyYXRvcnMgPSBbRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbF07XG4gICAgcHVibGljIHNlbGVjdGlvbk1vZGUhOiBPcHRpb25zRmlsdGVyU2VsZWN0aW9uTW9kZTtcbiAgICBwdWJsaWMgb3B0aW9ucyE6IE9wdGlvbnNGaWx0ZXJPcHRpb25bXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uICYgT3B0aW9uc0ZpbHRlckRlZmluaXRpb24pIHtcbiAgICAgICAgc3VwZXIoZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZzxSZXF1ZXN0PihrZXk6IHN0cmluZywgcmVxdWVzdDogUmVxdWVzdCwgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPE9wdGlvbnNGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHN1cGVyLmdldENvbmZpZyhrZXksIHJlcXVlc3QsIHVzZXIpO1xuXG4gICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlOiB0aGlzLnNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICBvcHRpb25zOiBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLm9wdGlvbnMubWFwKGFzeW5jIHggPT4gKHtcbiAgICAgICAgICAgICAgICBrZXk6IHgua2V5LFxuICAgICAgICAgICAgICAgIG5hbWU6IGF3YWl0IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIHVzZXI/Lmxhbmd1YWdlID8/IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclV0aWxzLmdldFJhZGlvT3B0aW9uVHJhbnNsYXRpb25LZXkoa2V5LCB4LmtleSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KSkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluY2x1ZGVQYXRocyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgZGF0YT86IG9iamVjdCk6IFBhdGhNb2RlbFtdIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoeCA9PiB4LmtleSA9PT0gcnVsZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IG9wdGlvbj8uY29uZGl0aW9uO1xuICAgICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluY2x1ZGVQYXRocyhydWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJ1bGVQYXRocyhjb25kaXRpb24ucnVsZXMsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZCh4ID0+IHgua2V5ID09PSBydWxlLnZhbHVlKTtcbiAgICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMocnVsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wdGlvbi5jb25kaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgICAgIC4uLnJ1bGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IG9wdGlvbi5vcGVyYXRvciB8fCBydWxlLm9wZXJhdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb25zdCB3aGVyZSA9IG9wdGlvbi5jb25kaXRpb24uY29uZGl0aW9uID09PSBcImFuZFwiID8geyBbT3AuYW5kXTogY29uZGl0aW9ucyB9IDogeyBbT3Aub3JdOiBjb25kaXRpb25zIH07XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVSdWxlV2hlcmVPcHRpb25zKG9wdGlvbi5jb25kaXRpb24sIGNvbmRpdGlvbnMsIHJ1bGUpO1xuICAgICAgICBjb25kaXRpb25zLnB1c2goXG4gICAgICAgICAgICBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgICAgIC4uLnJ1bGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IG9wdGlvbi5vcGVyYXRvciB8fCBydWxlLm9wZXJhdGlvblxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRIYXZpbmdPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoeCA9PiB4LmtleSA9PT0gcnVsZS52YWx1ZSk7XG4gICAgICAgIGlmICghb3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SGF2aW5nT3B0aW9ucyhydWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdXBlci5nZXRIYXZpbmdPcHRpb25zKHtcbiAgICAgICAgICAgIC4uLnJ1bGUsXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uOiBvcHRpb24ub3BlcmF0b3IgPz8gcnVsZS5vcGVyYXRpb25cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlUGF0aHMocnVsZXM6IChGaWx0ZXJDb25kaXRpb25SdWxlIHwgRmlsdGVyQ29uZGl0aW9uKVtdLCBkYXRhPzogb2JqZWN0KTogUGF0aE1vZGVsW10ge1xuICAgICAgICBjb25zdCBwYXRoczogUGF0aE1vZGVsW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgIGlmICgocnVsZSBhcyBGaWx0ZXJDb25kaXRpb24pLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgcGF0aHMucHVzaCguLi50aGlzLmdldFJ1bGVQYXRocygocnVsZSBhcyBGaWx0ZXJDb25kaXRpb24pLnJ1bGVzLCBkYXRhKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChydWxlIGFzIEZpbHRlckNvbmRpdGlvblJ1bGUpLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAocGF0aHMuZXZlcnkoKHBhdGgpID0+IHBhdGgucGF0aCAhPT0gKHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uUnVsZSkucGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uUnVsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiByLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZTogRmlsdGVyVXRpbHMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoci53aGVyZSwgZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGhzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZDogVXNlIE9wdGlvbnNGaWx0ZXIgaW5zdGVhZFxuICovXG5leHBvcnQgY2xhc3MgUmFkaW9GaWx0ZXIgZXh0ZW5kcyBPcHRpb25zRmlsdGVyIHtcbiAgICBwdWJsaWMgdHlwZSA9IEZpbHRlclR5cGUuUmFkaW87XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBCYXNlRmlsdGVyRGVmaW5pdGlvbiAmIE9taXQ8T3B0aW9uc0ZpbHRlckRlZmluaXRpb24sIFwic2VsZWN0aW9uTW9kZVwiPikge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZTogXCJyYWRpb1wiXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ import { Sequelize } from "sequelize-typescript";
2
+ import { M } from "../sequelize.utils";
3
+ export declare class DialectFormatterService {
4
+ private sequelize;
5
+ constructor(sequelize: Sequelize);
6
+ formatCol(model: string, column: string): string;
7
+ getGroupLiteral(model: typeof M, group: string): string;
8
+ getOrderFullName(attribute: string, path: string[]): string;
9
+ getLiteralFullName(attribute: string, path: string | string[]): string;
10
+ }
@@ -0,0 +1,58 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DialectFormatterService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const sequelize_typescript_1 = require("sequelize-typescript");
15
+ let DialectFormatterService = class DialectFormatterService {
16
+ constructor(sequelize) {
17
+ this.sequelize = sequelize;
18
+ }
19
+ formatCol(model, column) {
20
+ const dialect = this.sequelize.getDialect();
21
+ if (dialect === "mssql") {
22
+ return `[${model}].[${column}]`;
23
+ }
24
+ return `\`${model}\`.\`${column}\``;
25
+ }
26
+ getGroupLiteral(model, group) {
27
+ const items = group.split(".");
28
+ if (items.length > 1) {
29
+ const column = items[items.length - 1];
30
+ return this.getLiteralFullName(column, items.slice(0, items.length - 1));
31
+ }
32
+ return this.formatCol(model.name, group);
33
+ }
34
+ getOrderFullName(attribute, path) {
35
+ const dialect = this.sequelize.getDialect();
36
+ if (dialect === "mssql") {
37
+ return `[${path.join("->")}].[${attribute}]`;
38
+ }
39
+ return `${path.join("->")}.${attribute}`;
40
+ }
41
+ getLiteralFullName(attribute, path) {
42
+ if (typeof path === "string") {
43
+ path = path.split(".");
44
+ }
45
+ const dialect = this.sequelize.getDialect();
46
+ if (dialect === "mssql") {
47
+ return `[${path.join("->")}].[${attribute}]`;
48
+ }
49
+ return `\`${path.join("->")}\`.\`${attribute}\``;
50
+ }
51
+ };
52
+ exports.DialectFormatterService = DialectFormatterService;
53
+ exports.DialectFormatterService = DialectFormatterService = __decorate([
54
+ (0, common_1.Injectable)(),
55
+ __metadata("design:paramtypes", [sequelize_typescript_1.Sequelize])
56
+ ], DialectFormatterService);
57
+
58
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zZXJ2aWNlcy9kaWFsZWN0LWZvcm1hdHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QywrREFBaUQ7QUFJMUMsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7SUFDaEMsWUFBb0IsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztJQUFHLENBQUM7SUFFckMsU0FBUyxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUMsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxHQUFHLENBQUM7U0FDbkM7UUFFRCxPQUFPLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBZSxFQUFFLEtBQWE7UUFDakQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUU7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxJQUFjO1FBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUMsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDO1NBQ2hEO1FBRUQsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFNBQWlCLEVBQUUsSUFBdUI7UUFDaEUsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVDLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUNyQixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQztTQUNoRDtRQUVELE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLFNBQVMsSUFBSSxDQUFDO0lBQ3JELENBQUM7Q0FDSixDQUFBO0FBM0NZLDBEQUF1QjtrQ0FBdkIsdUJBQXVCO0lBRG5DLElBQUEsbUJBQVUsR0FBRTtxQ0FFc0IsZ0NBQVM7R0FEL0IsdUJBQXVCLENBMkNuQyIsImZpbGUiOiJsaWIvc2VydmljZXMvZGlhbGVjdC1mb3JtYXR0ZXIuc2VydmljZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IFNlcXVlbGl6ZSB9IGZyb20gXCJzZXF1ZWxpemUtdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgTSB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcXVlbGl6ZTogU2VxdWVsaXplKSB7fVxuXG4gICAgcHVibGljIGZvcm1hdENvbChtb2RlbDogc3RyaW5nLCBjb2x1bW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRpYWxlY3QgPSB0aGlzLnNlcXVlbGl6ZS5nZXREaWFsZWN0KCk7XG4gICAgICAgIGlmIChkaWFsZWN0ID09PSBcIm1zc3FsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgWyR7bW9kZWx9XS5bJHtjb2x1bW59XWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYFxcYCR7bW9kZWx9XFxgLlxcYCR7Y29sdW1ufVxcYGA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEdyb3VwTGl0ZXJhbChtb2RlbDogdHlwZW9mIE0sIGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGdyb3VwLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGNvbHVtbiwgaXRlbXMuc2xpY2UoMCwgaXRlbXMubGVuZ3RoIC0gMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0Q29sKG1vZGVsLm5hbWUsIGdyb3VwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0T3JkZXJGdWxsTmFtZShhdHRyaWJ1dGU6IHN0cmluZywgcGF0aDogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgZGlhbGVjdCA9IHRoaXMuc2VxdWVsaXplLmdldERpYWxlY3QoKTtcbiAgICAgICAgaWYgKGRpYWxlY3QgPT09IFwibXNzcWxcIikge1xuICAgICAgICAgICAgcmV0dXJuIGBbJHtwYXRoLmpvaW4oXCItPlwiKX1dLlske2F0dHJpYnV0ZX1dYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgJHtwYXRoLmpvaW4oXCItPlwiKX0uJHthdHRyaWJ1dGV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGl0ZXJhbEZ1bGxOYW1lKGF0dHJpYnV0ZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpYWxlY3QgPSB0aGlzLnNlcXVlbGl6ZS5nZXREaWFsZWN0KCk7XG4gICAgICAgIGlmIChkaWFsZWN0ID09PSBcIm1zc3FsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgWyR7cGF0aC5qb2luKFwiLT5cIil9XS5bJHthdHRyaWJ1dGV9XWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYFxcYCR7cGF0aC5qb2luKFwiLT5cIil9XFxgLlxcYCR7YXR0cmlidXRlfVxcYGA7XG4gICAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@recursyve/nestjs-data-filter",
3
- "version": "9.3.2",
3
+ "version": "9.3.3",
4
4
  "description": "NestJs DataFilter library",
5
5
  "main": "index.js",
6
6
  "scripts": {