@sisense/sdk-data 1.11.0 → 1.12.0

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.
Files changed (96) hide show
  1. package/dist/cjs/dimensional-model/analytics/factory.d.ts +47 -0
  2. package/dist/cjs/dimensional-model/analytics/factory.js +151 -0
  3. package/dist/cjs/dimensional-model/analytics/factory.test.d.ts +1 -0
  4. package/dist/cjs/dimensional-model/analytics/factory.test.js +99 -0
  5. package/dist/cjs/dimensional-model/attributes.d.ts +139 -0
  6. package/dist/cjs/dimensional-model/attributes.js +342 -0
  7. package/dist/cjs/dimensional-model/attributes.test.d.ts +1 -0
  8. package/dist/cjs/dimensional-model/attributes.test.js +154 -0
  9. package/dist/cjs/dimensional-model/base.d.ts +43 -0
  10. package/dist/cjs/dimensional-model/base.js +58 -0
  11. package/dist/cjs/dimensional-model/base.test.d.ts +1 -0
  12. package/dist/cjs/dimensional-model/base.test.js +17 -0
  13. package/dist/cjs/dimensional-model/data-model.d.ts +13 -0
  14. package/dist/cjs/dimensional-model/data-model.js +37 -0
  15. package/dist/cjs/dimensional-model/dimensions.d.ts +167 -0
  16. package/dist/cjs/dimensional-model/dimensions.js +307 -0
  17. package/dist/cjs/dimensional-model/dimensions.test.d.ts +1 -0
  18. package/dist/cjs/dimensional-model/dimensions.test.js +54 -0
  19. package/dist/cjs/dimensional-model/factory.d.ts +17 -0
  20. package/dist/cjs/dimensional-model/factory.js +54 -0
  21. package/dist/cjs/dimensional-model/filters/factory.d.ts +796 -0
  22. package/dist/cjs/dimensional-model/filters/factory.js +962 -0
  23. package/dist/cjs/dimensional-model/filters/factory.test.d.ts +1 -0
  24. package/dist/cjs/dimensional-model/filters/factory.test.js +366 -0
  25. package/dist/cjs/dimensional-model/filters/filters.d.ts +321 -0
  26. package/dist/cjs/dimensional-model/filters/filters.js +614 -0
  27. package/dist/cjs/dimensional-model/filters/filters.test.d.ts +1 -0
  28. package/dist/cjs/dimensional-model/filters/filters.test.js +225 -0
  29. package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.d.ts +47 -0
  30. package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.js +111 -0
  31. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.d.ts +21 -0
  32. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.js +194 -0
  33. package/dist/cjs/dimensional-model/filters/utils/date-time-filter-util.d.ts +2 -0
  34. package/dist/cjs/dimensional-model/filters/utils/date-time-filter-util.js +12 -0
  35. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.d.ts +13 -0
  36. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.js +54 -0
  37. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.test.d.ts +1 -0
  38. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.test.js +32 -0
  39. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +73 -0
  40. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +190 -0
  41. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.d.ts +1 -0
  42. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.js +558 -0
  43. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.d.ts +5 -0
  44. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.js +174 -0
  45. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.test.d.ts +1 -0
  46. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.test.js +236 -0
  47. package/dist/cjs/dimensional-model/filters/utils/filter-types-util.d.ts +17 -0
  48. package/dist/cjs/dimensional-model/filters/utils/filter-types-util.js +79 -0
  49. package/dist/cjs/dimensional-model/filters/utils/types.d.ts +200 -0
  50. package/dist/cjs/dimensional-model/filters/utils/types.js +99 -0
  51. package/dist/cjs/dimensional-model/interfaces.d.ts +512 -0
  52. package/dist/cjs/dimensional-model/interfaces.js +31 -0
  53. package/dist/cjs/dimensional-model/measures/factory.d.ts +920 -0
  54. package/dist/cjs/dimensional-model/measures/factory.js +1188 -0
  55. package/dist/cjs/dimensional-model/measures/factory.test.d.ts +1 -0
  56. package/dist/cjs/dimensional-model/measures/factory.test.js +481 -0
  57. package/dist/cjs/dimensional-model/measures/measures.d.ts +217 -0
  58. package/dist/cjs/dimensional-model/measures/measures.js +416 -0
  59. package/dist/cjs/dimensional-model/measures/measures.test.d.ts +1 -0
  60. package/dist/cjs/dimensional-model/measures/measures.test.js +79 -0
  61. package/dist/cjs/dimensional-model/simple-column-types.d.ts +39 -0
  62. package/dist/cjs/dimensional-model/simple-column-types.js +134 -0
  63. package/dist/cjs/dimensional-model/simple-column-types.test.d.ts +1 -0
  64. package/dist/cjs/dimensional-model/simple-column-types.test.js +85 -0
  65. package/dist/cjs/dimensional-model/types.d.ts +256 -0
  66. package/dist/cjs/dimensional-model/types.js +298 -0
  67. package/dist/cjs/dimensional-model/types.test.d.ts +1 -0
  68. package/dist/cjs/dimensional-model/types.test.js +33 -0
  69. package/dist/cjs/index.d.ts +93 -0
  70. package/dist/cjs/index.js +123 -0
  71. package/dist/cjs/interfaces.d.ts +367 -0
  72. package/dist/cjs/interfaces.js +21 -0
  73. package/dist/cjs/translation/initialize-i18n.d.ts +2 -0
  74. package/dist/cjs/translation/initialize-i18n.js +14 -0
  75. package/dist/cjs/translation/resources/en.d.ts +28 -0
  76. package/dist/cjs/translation/resources/en.js +30 -0
  77. package/dist/cjs/translation/resources/index.d.ts +53 -0
  78. package/dist/cjs/translation/resources/index.js +10 -0
  79. package/dist/cjs/translation/resources/uk.d.ts +5 -0
  80. package/dist/cjs/translation/resources/uk.js +30 -0
  81. package/dist/cjs/translation/translatable-error.d.ts +5 -0
  82. package/dist/cjs/translation/translatable-error.js +15 -0
  83. package/dist/cjs/utils.d.ts +37 -0
  84. package/dist/cjs/utils.js +105 -0
  85. package/dist/cjs/utils.test.d.ts +1 -0
  86. package/dist/cjs/utils.test.js +158 -0
  87. package/dist/dimensional-model/filters/factory.d.ts +80 -42
  88. package/dist/dimensional-model/filters/factory.js +123 -85
  89. package/dist/dimensional-model/filters/filters.d.ts +34 -12
  90. package/dist/dimensional-model/filters/filters.js +69 -27
  91. package/dist/dimensional-model/filters/utils/condition-filter-util.d.ts +4 -2
  92. package/dist/dimensional-model/filters/utils/condition-filter-util.js +27 -25
  93. package/dist/dimensional-model/filters/utils/filter-code-util.js +1 -1
  94. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +16 -10
  95. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +34 -27
  96. package/package.json +18 -9
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFilterMatcher = void 0;
4
+ const condition_filter_util_js_1 = require("./condition-filter-util.js");
5
+ const filter_types_util_js_1 = require("./filter-types-util.js");
6
+ const types_js_1 = require("./types.js");
7
+ const defaultFormatter = (value) => {
8
+ if (value === undefined) {
9
+ return undefined;
10
+ }
11
+ return `${value}`;
12
+ };
13
+ const defaultDatetimeFormatter = (value) => {
14
+ if (value === undefined) {
15
+ return undefined;
16
+ }
17
+ return new Date(value).toISOString();
18
+ };
19
+ const defaultMatcher = () => false;
20
+ function createCombinedFilterMatcher(createFilterMatcherFn, filterJaql) {
21
+ const filter = filterJaql.filter;
22
+ if ('or' in filter) {
23
+ return (value) => {
24
+ return filter.or
25
+ .map((filterItem) => createFilterMatcherFn(Object.assign(Object.assign({}, filterJaql), { filter: filterItem })))
26
+ .reduce((acc, filterMatcher) => {
27
+ return acc || filterMatcher(value);
28
+ }, false);
29
+ };
30
+ }
31
+ if ('and' in filter) {
32
+ return (value) => {
33
+ return filter.and
34
+ .map((filterItem) => createFilterMatcherFn(Object.assign(Object.assign({}, filterJaql), { filter: filterItem })))
35
+ .reduce((acc, filterMatcher) => {
36
+ return acc && filterMatcher(value);
37
+ }, true);
38
+ };
39
+ }
40
+ return createFilterMatcherFn(filterJaql);
41
+ }
42
+ function createMembersFilterMatcher(filterJaql) {
43
+ const { datatype } = filterJaql;
44
+ const filter = filterJaql.filter;
45
+ const formatter = datatype === 'datetime' ? defaultDatetimeFormatter : defaultFormatter;
46
+ return (value) => {
47
+ const formattedMembers = filter.members.map(formatter);
48
+ const formattedValue = formatter(value);
49
+ return formattedMembers.includes(formattedValue);
50
+ };
51
+ }
52
+ function createExcludeMembersFilterMatcher(filterJaql) {
53
+ const { datatype } = filterJaql;
54
+ const filter = filterJaql.filter;
55
+ const formatter = datatype === 'datetime' ? defaultDatetimeFormatter : defaultFormatter;
56
+ return (value) => {
57
+ var _a, _b;
58
+ const formattedMembers = ((_b = (_a = filter.exclude) === null || _a === void 0 ? void 0 : _a.members) === null || _b === void 0 ? void 0 : _b.map(formatter)) || [];
59
+ const formattedValue = formatter(value);
60
+ return !formattedMembers.includes(formattedValue);
61
+ };
62
+ }
63
+ function createTextFilterMatcher(filterJaql) {
64
+ const filter = filterJaql.filter;
65
+ const conditionFilterType = (0, condition_filter_util_js_1.getSelectedConditionOption)(filter);
66
+ if (conditionFilterType === types_js_1.ConditionFilterType.STARTS_WITH) {
67
+ return (value) => {
68
+ return new RegExp(`^${filter.startsWith}`, 'i').test(value);
69
+ };
70
+ }
71
+ if (conditionFilterType === types_js_1.ConditionFilterType.ENDS_WITH) {
72
+ return (value) => {
73
+ return new RegExp(`${filter.endsWith}$`, 'i').test(value);
74
+ };
75
+ }
76
+ if (conditionFilterType === types_js_1.ConditionFilterType.CONTAINS) {
77
+ return (value) => {
78
+ return new RegExp(filter.contains, 'i').test(value);
79
+ };
80
+ }
81
+ if (conditionFilterType === types_js_1.ConditionFilterType.EQUALS) {
82
+ return (value) => {
83
+ return (value.localeCompare(filter.equals, undefined, {
84
+ sensitivity: 'base',
85
+ }) === 0);
86
+ };
87
+ }
88
+ if (conditionFilterType === types_js_1.ConditionFilterType.DOESNT_START_WITH) {
89
+ return (value) => {
90
+ return !new RegExp(`^${filter.doesntStartWith}`, 'i').test(value);
91
+ };
92
+ }
93
+ if (conditionFilterType === types_js_1.ConditionFilterType.DOESNT_END_WITH) {
94
+ return (value) => {
95
+ return !new RegExp(`${filter.doesntEndWith}$`, 'i').test(value);
96
+ };
97
+ }
98
+ if (conditionFilterType === types_js_1.ConditionFilterType.DOESNT_CONTAIN) {
99
+ return (value) => {
100
+ return !new RegExp(filter.doesntContain, 'i').test(value);
101
+ };
102
+ }
103
+ if (conditionFilterType === types_js_1.ConditionFilterType.DOESNT_EQUAL) {
104
+ return (value) => {
105
+ return (value.localeCompare(filter.doesntEqual, undefined, {
106
+ sensitivity: 'base',
107
+ }) !== 0);
108
+ };
109
+ }
110
+ return defaultMatcher;
111
+ }
112
+ function createNumericFilterMatcher(filterJaql) {
113
+ const filter = filterJaql.filter;
114
+ const conditionFilterType = (0, condition_filter_util_js_1.getSelectedConditionOption)(filter);
115
+ if (conditionFilterType === types_js_1.ConditionFilterType.EQUALS) {
116
+ return (value) => {
117
+ return Number(filter.equals) === Number(value);
118
+ };
119
+ }
120
+ if (conditionFilterType === types_js_1.ConditionFilterType.DOESNT_EQUAL) {
121
+ return (value) => {
122
+ return Number(filter.doesntEqual) !== Number(value);
123
+ };
124
+ }
125
+ if (conditionFilterType === types_js_1.ConditionFilterType.LESS_THAN) {
126
+ return (value) => {
127
+ return Number(value) < Number(filter.toNotEqual);
128
+ };
129
+ }
130
+ if (conditionFilterType === types_js_1.ConditionFilterType.GREATER_THAN) {
131
+ return (value) => {
132
+ return Number(value) > Number(filter.fromNotEqual);
133
+ };
134
+ }
135
+ if (conditionFilterType === types_js_1.ConditionFilterType.BETWEEN) {
136
+ return (value) => {
137
+ return Number(filter.to) >= Number(value) && Number(value) >= Number(filter.from);
138
+ };
139
+ }
140
+ if (conditionFilterType === types_js_1.ConditionFilterType.GREATER_THAN_OR_EQUAL) {
141
+ return (value) => {
142
+ return Number(value) >= Number(filter.from);
143
+ };
144
+ }
145
+ if (conditionFilterType === types_js_1.ConditionFilterType.LESS_THAN_OR_EQUAL) {
146
+ return (value) => {
147
+ return Number(filter.to) >= Number(value);
148
+ };
149
+ }
150
+ return defaultMatcher;
151
+ }
152
+ /** @internal */
153
+ function createFilterMatcher(filterJaql) {
154
+ const filterJaqlInternal = filterJaql;
155
+ const { datatype } = filterJaqlInternal;
156
+ const filter = filterJaqlInternal.filter;
157
+ if ((0, filter_types_util_js_1.isSpecificItemsFilter)(filter)) {
158
+ return createMembersFilterMatcher(filterJaqlInternal);
159
+ }
160
+ if ((0, filter_types_util_js_1.isConditionFilter)(filter) &&
161
+ (0, condition_filter_util_js_1.getSelectedConditionOption)(filter) === types_js_1.ConditionFilterType.IS_NOT) {
162
+ return createExcludeMembersFilterMatcher(filterJaqlInternal);
163
+ }
164
+ // text filters
165
+ if (datatype === 'text') {
166
+ return createCombinedFilterMatcher(createTextFilterMatcher, filterJaqlInternal);
167
+ }
168
+ // // numeric filters
169
+ if (datatype === 'numeric') {
170
+ return createCombinedFilterMatcher(createNumericFilterMatcher, filterJaqlInternal);
171
+ }
172
+ return defaultMatcher;
173
+ }
174
+ exports.createFilterMatcher = createFilterMatcher;
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const filter_matcher_utils_js_1 = require("./filter-matcher-utils.js");
4
+ describe('createFilterMatcher', () => {
5
+ it('should create a filter matcher for specific items', () => {
6
+ const membersFilterJaql = {
7
+ datatype: 'text',
8
+ filter: {
9
+ members: ['item1', 'item2', 'item3'],
10
+ },
11
+ };
12
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(membersFilterJaql);
13
+ expect(filterMatcher('item1')).toBe(true);
14
+ expect(filterMatcher('item4')).toBe(false);
15
+ });
16
+ it('should create a filter matcher for excluding specific items', () => {
17
+ const excludeMembersFilterJaql = {
18
+ datatype: 'text',
19
+ filter: {
20
+ exclude: {
21
+ members: ['exclude1', 'exclude2'],
22
+ },
23
+ },
24
+ };
25
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(excludeMembersFilterJaql);
26
+ expect(filterMatcher('exclude1')).toBe(false);
27
+ expect(filterMatcher('exclude3')).toBe(true);
28
+ });
29
+ it('should create a text filter matcher for STARTS_WITH text condition', () => {
30
+ const startWithFilterJaql = {
31
+ datatype: 'text',
32
+ filter: {
33
+ startsWith: 'abc',
34
+ },
35
+ };
36
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(startWithFilterJaql);
37
+ expect(filterMatcher('abcdef')).toBe(true);
38
+ expect(filterMatcher('xyzabc')).toBe(false);
39
+ });
40
+ it('should create a text filter matcher for ENDS_WITH text condition', () => {
41
+ const endsWithFilterJaql = {
42
+ datatype: 'text',
43
+ filter: {
44
+ endsWith: 'abc',
45
+ },
46
+ };
47
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(endsWithFilterJaql);
48
+ expect(filterMatcher('abcdef')).toBe(false);
49
+ expect(filterMatcher('xyzabc')).toBe(true);
50
+ });
51
+ it('should create a text filter matcher for CONTAINS text condition', () => {
52
+ const containsFilterJaql = {
53
+ datatype: 'text',
54
+ filter: {
55
+ contains: 'abc',
56
+ },
57
+ };
58
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(containsFilterJaql);
59
+ expect(filterMatcher('abcdef')).toBe(true);
60
+ expect(filterMatcher('xyz')).toBe(false);
61
+ });
62
+ it('should create a filter matcher for EQUALS text condition', () => {
63
+ const equalsFilterJaql = {
64
+ datatype: 'text',
65
+ filter: {
66
+ equals: 'abc',
67
+ },
68
+ };
69
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(equalsFilterJaql);
70
+ expect(filterMatcher('abc')).toBe(true);
71
+ expect(filterMatcher('def')).toBe(false);
72
+ });
73
+ it('should create a text filter matcher for DOESNT_START_WITH text condition', () => {
74
+ const doesntStartWithFilterJaql = {
75
+ datatype: 'text',
76
+ filter: {
77
+ doesntStartWith: 'abc',
78
+ },
79
+ };
80
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(doesntStartWithFilterJaql);
81
+ expect(filterMatcher('abcdef')).toBe(false);
82
+ expect(filterMatcher('xyzabc')).toBe(true);
83
+ });
84
+ it('should create a text filter matcher for DOESNT_END_WITH text condition', () => {
85
+ const doesntEndWithFilterJaql = {
86
+ datatype: 'text',
87
+ filter: {
88
+ doesntEndWith: 'abc',
89
+ },
90
+ };
91
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(doesntEndWithFilterJaql);
92
+ expect(filterMatcher('abcdef')).toBe(true);
93
+ expect(filterMatcher('xyzabc')).toBe(false);
94
+ });
95
+ it('should create a text filter matcher for DOESNT_CONTAIN text condition', () => {
96
+ const doesntContainFilterJaql = {
97
+ datatype: 'text',
98
+ filter: {
99
+ doesntContain: 'abc',
100
+ },
101
+ };
102
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(doesntContainFilterJaql);
103
+ expect(filterMatcher('abcdef')).toBe(false);
104
+ expect(filterMatcher('xyz')).toBe(true);
105
+ });
106
+ it('should create a filter matcher for DOESNT_EQUAL text condition', () => {
107
+ const doesntEqualFilterJaql = {
108
+ datatype: 'text',
109
+ filter: {
110
+ doesntEqual: 'abc',
111
+ },
112
+ };
113
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(doesntEqualFilterJaql);
114
+ expect(filterMatcher('abc')).toBe(false);
115
+ expect(filterMatcher('def')).toBe(true);
116
+ });
117
+ it('should create a filter matcher for EQUALS numeric condition', () => {
118
+ const equalsNumericFilterJaql = {
119
+ datatype: 'numeric',
120
+ filter: {
121
+ equals: 10,
122
+ },
123
+ };
124
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(equalsNumericFilterJaql);
125
+ expect(filterMatcher(10)).toBe(true);
126
+ expect(filterMatcher(5)).toBe(false);
127
+ });
128
+ it('should create a filter matcher for DOESNT_EQUAL numeric condition', () => {
129
+ const doesntEqualNumericFilterJaql = {
130
+ datatype: 'numeric',
131
+ filter: {
132
+ doesntEqual: 10,
133
+ },
134
+ };
135
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(doesntEqualNumericFilterJaql);
136
+ expect(filterMatcher(10)).toBe(false);
137
+ expect(filterMatcher(5)).toBe(true);
138
+ });
139
+ it('should create a filter matcher for LESS_THAN numeric condition', () => {
140
+ const lessThanNumericFilterJaql = {
141
+ datatype: 'numeric',
142
+ filter: {
143
+ toNotEqual: 10,
144
+ },
145
+ };
146
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(lessThanNumericFilterJaql);
147
+ expect(filterMatcher(5)).toBe(true);
148
+ expect(filterMatcher(15)).toBe(false);
149
+ });
150
+ it('should create a filter matcher for GREATER_THAN numeric condition', () => {
151
+ const greaterThanNumericFilterJaql = {
152
+ datatype: 'numeric',
153
+ filter: {
154
+ fromNotEqual: 10,
155
+ },
156
+ };
157
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(greaterThanNumericFilterJaql);
158
+ expect(filterMatcher(15)).toBe(true);
159
+ expect(filterMatcher(5)).toBe(false);
160
+ });
161
+ it('should create a filter matcher for BETWEEN numeric condition', () => {
162
+ const betweenNumericFilterJaql = {
163
+ datatype: 'numeric',
164
+ filter: {
165
+ from: 5,
166
+ to: 10,
167
+ },
168
+ };
169
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(betweenNumericFilterJaql);
170
+ expect(filterMatcher(7)).toBe(true);
171
+ expect(filterMatcher(3)).toBe(false);
172
+ expect(filterMatcher(12)).toBe(false);
173
+ });
174
+ it('should create a filter matcher for GREATER_THAN_OR_EQUAL numeric condition', () => {
175
+ const greaterThanOrEqualNumericFilterJaql = {
176
+ datatype: 'numeric',
177
+ filter: {
178
+ from: 10,
179
+ },
180
+ };
181
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(greaterThanOrEqualNumericFilterJaql);
182
+ expect(filterMatcher(15)).toBe(true);
183
+ expect(filterMatcher(10)).toBe(true);
184
+ expect(filterMatcher(5)).toBe(false);
185
+ });
186
+ it('should create a filter matcher for LESS_THAN_OR_EQUAL numeric condition', () => {
187
+ const lessThanOrEqualNumericFilterJaql = {
188
+ datatype: 'numeric',
189
+ filter: {
190
+ to: 10,
191
+ },
192
+ };
193
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(lessThanOrEqualNumericFilterJaql);
194
+ expect(filterMatcher(5)).toBe(true);
195
+ expect(filterMatcher(10)).toBe(true);
196
+ expect(filterMatcher(15)).toBe(false);
197
+ });
198
+ it('should create a filter matcher for "AND" combined multiple condition filters', () => {
199
+ const andCombinedFilterJaql = {
200
+ datatype: 'numeric',
201
+ filter: {
202
+ and: [
203
+ {
204
+ toNotEqual: 10,
205
+ },
206
+ {
207
+ fromNotEqual: 5,
208
+ },
209
+ ],
210
+ },
211
+ };
212
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(andCombinedFilterJaql);
213
+ expect(filterMatcher(10)).toBe(false);
214
+ expect(filterMatcher(7)).toBe(true);
215
+ expect(filterMatcher(5)).toBe(false);
216
+ });
217
+ it('should create a filter matcher for "OR" combined multiple condition filters', () => {
218
+ const orCombinedFilterJaql = {
219
+ datatype: 'text',
220
+ filter: {
221
+ or: [
222
+ {
223
+ equals: 'apple',
224
+ },
225
+ {
226
+ equals: 'banana',
227
+ },
228
+ ],
229
+ },
230
+ };
231
+ const filterMatcher = (0, filter_matcher_utils_js_1.createFilterMatcher)(orCombinedFilterJaql);
232
+ expect(filterMatcher('apple')).toBe(true);
233
+ expect(filterMatcher('banana')).toBe(true);
234
+ expect(filterMatcher('orange')).toBe(false);
235
+ });
236
+ });
@@ -0,0 +1,17 @@
1
+ import { FilterModalType, AnyTypeFilterJaql, DatetimeLevel, FilterType, SpecificItemsFilterJaql, ConditionFilterJaql, FilterJaqlInternal, FilterJaqlWrapperWithType } from './types.js';
2
+ export declare const isSpecificItemsFilter: (filter: AnyTypeFilterJaql) => filter is SpecificItemsFilterJaql;
3
+ export declare const isNumericRangeFilter: (filter: AnyTypeFilterJaql) => boolean;
4
+ export declare const isConditionFilter: (filter: AnyTypeFilterJaql) => filter is ConditionFilterJaql;
5
+ export declare const getFilterType: (filter: AnyTypeFilterJaql, dataType?: FilterModalType, timeData?: {
6
+ level?: DatetimeLevel;
7
+ bucket?: string;
8
+ }) => FilterType;
9
+ /**
10
+ * Extracts Filter Type from Filter Jaql
11
+ *
12
+ * @param jaql - jaql
13
+ * @param dataType - data type
14
+ * @return FilterJaqlWrapperType
15
+ * @internal
16
+ */
17
+ export declare const extractFilterTypeFromFilterJaql: (jaql: FilterJaqlInternal, dataType: FilterModalType) => FilterJaqlWrapperWithType;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractFilterTypeFromFilterJaql = exports.getFilterType = exports.isConditionFilter = exports.isNumericRangeFilter = exports.isSpecificItemsFilter = void 0;
4
+ const condition_filter_util_js_1 = require("./condition-filter-util.js");
5
+ const types_js_1 = require("./types.js");
6
+ const date_time_filter_util_js_1 = require("./date-time-filter-util.js");
7
+ const isIncludeAllFilter = (filter) => filter === null || filter === void 0 ? void 0 : filter.all;
8
+ const getInnerPeriodFilter = (filter) => (filter.last ? filter.last : filter.next);
9
+ const isPeriodFilter = (filter) => { var _a; return ((_a = getInnerPeriodFilter(filter)) === null || _a === void 0 ? void 0 : _a.offset) < 2; };
10
+ const isSpecificItemsFilter = (filter) => { var _a; return ((_a = filter === null || filter === void 0 ? void 0 : filter.members) === null || _a === void 0 ? void 0 : _a.length) > 0; };
11
+ exports.isSpecificItemsFilter = isSpecificItemsFilter;
12
+ const isFromOrToDefined = (fromRange, toRange) => (fromRange && typeof fromRange === 'string') || (toRange && typeof toRange === 'string');
13
+ const isFromAndToEmpty = (from, to) => from === '' && to === '';
14
+ const isDateRangeFilter = (filter, dataType) => {
15
+ const { from, to } = filter;
16
+ if (dataType !== types_js_1.FilterModalType.DATE_TIME)
17
+ return false;
18
+ if (isFromOrToDefined(from, to))
19
+ return true;
20
+ return isFromAndToEmpty(from, to);
21
+ };
22
+ const isNumericRangeFilter = (filter) => {
23
+ const { from, to } = filter;
24
+ return !!(from !== undefined && to !== undefined && !filter.isBetween);
25
+ };
26
+ exports.isNumericRangeFilter = isNumericRangeFilter;
27
+ const isConditionFilter = (filter) => (0, condition_filter_util_js_1.getSelectedConditionOption)(filter) !== types_js_1.ConditionFilterType.NONE;
28
+ exports.isConditionFilter = isConditionFilter;
29
+ const isAdvancedFilter = (filter) => Object.keys(filter).includes('isAdvanced');
30
+ const isTimeLevelNotSupported = (timeData) => !!(timeData.level &&
31
+ timeData.bucket &&
32
+ timeData.level === types_js_1.DatetimeLevel.MINUTES &&
33
+ types_js_1.nonSupportedMinutesBuckets.includes(timeData.bucket));
34
+ const isInvalidFilter = (filter) => filter.filterType === types_js_1.FILTER_TYPES.INVALID;
35
+ const getFilterType = (filter, dataType = types_js_1.FilterModalType.DATE_TIME, timeData) => {
36
+ if (timeData && isTimeLevelNotSupported(timeData))
37
+ return types_js_1.FILTER_TYPES.ADVANCED;
38
+ if (isIncludeAllFilter(filter))
39
+ return types_js_1.FILTER_TYPES.INCLUDE_ALL;
40
+ if (isPeriodFilter(filter))
41
+ return types_js_1.FILTER_TYPES.PERIOD;
42
+ if ((0, exports.isSpecificItemsFilter)(filter))
43
+ return types_js_1.FILTER_TYPES.SPECIFIC_ITEMS;
44
+ if (isDateRangeFilter(filter, dataType))
45
+ return types_js_1.FILTER_TYPES.DATE_RANGE;
46
+ if ((0, exports.isNumericRangeFilter)(filter))
47
+ return types_js_1.FILTER_TYPES.NUMERIC_RANGE;
48
+ if ((0, exports.isConditionFilter)(filter))
49
+ return types_js_1.FILTER_TYPES.CONDITION;
50
+ if (isAdvancedFilter(filter))
51
+ return types_js_1.FILTER_TYPES.ADVANCED;
52
+ if (isInvalidFilter(filter))
53
+ return types_js_1.FILTER_TYPES.INVALID;
54
+ return types_js_1.FILTER_TYPES.ADVANCED;
55
+ };
56
+ exports.getFilterType = getFilterType;
57
+ /**
58
+ * Extracts Filter Type from Filter Jaql
59
+ *
60
+ * @param jaql - jaql
61
+ * @param dataType - data type
62
+ * @return FilterJaqlWrapperType
63
+ * @internal
64
+ */
65
+ const extractFilterTypeFromFilterJaql = (jaql, dataType) => {
66
+ const { level: filterLevel, filter, bucket } = jaql;
67
+ const filterFromJaql = filter || types_js_1.DEFAULT_FILTER_JAQL_WRAPPER.filter;
68
+ const filterToReturn = {
69
+ filter: Object.assign(Object.assign({}, filterFromJaql), { filterType: (0, exports.getFilterType)(filterFromJaql, dataType) }),
70
+ };
71
+ if (dataType === types_js_1.FilterModalType.DATE_TIME) {
72
+ const backgroundFilter = filterFromJaql;
73
+ const level = (backgroundFilter === null || backgroundFilter === void 0 ? void 0 : backgroundFilter.level) || filterLevel;
74
+ filterToReturn.level = (0, date_time_filter_util_js_1.getCorrectTimeLevel)(level, bucket);
75
+ filterToReturn.filter.filterType = (0, exports.getFilterType)(filterFromJaql, dataType, { level, bucket });
76
+ }
77
+ return filterToReturn;
78
+ };
79
+ exports.extractFilterTypeFromFilterJaql = extractFilterTypeFromFilterJaql;