@sisense/sdk-data 1.11.0 → 1.13.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 (99) hide show
  1. package/dist/cjs/dimensional-model/analytics/factory.d.ts +47 -0
  2. package/dist/cjs/dimensional-model/analytics/factory.js +153 -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 +797 -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 +344 -0
  26. package/dist/cjs/dimensional-model/filters/filters.js +663 -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 +196 -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 +58 -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 +82 -0
  40. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +215 -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 +623 -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 +206 -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/analytics/factory.js +6 -4
  88. package/dist/dimensional-model/filters/factory.d.ts +81 -42
  89. package/dist/dimensional-model/filters/factory.js +125 -87
  90. package/dist/dimensional-model/filters/filters.d.ts +58 -13
  91. package/dist/dimensional-model/filters/filters.js +117 -27
  92. package/dist/dimensional-model/filters/utils/condition-filter-util.d.ts +4 -2
  93. package/dist/dimensional-model/filters/utils/condition-filter-util.js +30 -26
  94. package/dist/dimensional-model/filters/utils/filter-code-util.js +5 -1
  95. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +26 -11
  96. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +58 -27
  97. package/dist/dimensional-model/filters/utils/filter-types-util.js +3 -3
  98. package/dist/dimensional-model/filters/utils/types.d.ts +6 -0
  99. package/package.json +18 -9
@@ -0,0 +1,663 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createFilter = exports.CustomFilter = exports.RelativeDateFilter = exports.DateRangeFilter = exports.TextFilter = exports.NumericFilter = exports.RankingFilter = exports.MeasureFilter = exports.DoubleOperatorFilter = exports.ExcludeFilter = exports.CascadingFilter = exports.MembersFilter = exports.LogicalAttributeFilter = exports.FilterTypes = exports.RankingOperators = exports.LogicalOperators = exports.DateOperators = exports.NumericOperators = exports.TextOperators = void 0;
7
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
8
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
9
+ /* eslint-disable @typescript-eslint/no-unsafe-return */
10
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
11
+ /* eslint-disable max-params */
12
+ /* eslint-disable @typescript-eslint/restrict-template-expressions */
13
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
14
+ const object_hash_1 = __importDefault(require("object-hash"));
15
+ const base_js_1 = require("../base.js");
16
+ const types_js_1 = require("../types.js");
17
+ const factory_js_1 = require("../factory.js");
18
+ const measures_js_1 = require("../measures/measures.js");
19
+ const translatable_error_js_1 = require("../../translation/translatable-error.js");
20
+ const utils_js_1 = require("../../utils.js");
21
+ /**
22
+ * Different text operators that can be used with text filters
23
+ *
24
+ * @internal
25
+ */
26
+ exports.TextOperators = {
27
+ Contains: 'contains',
28
+ StartsWith: 'startsWith',
29
+ EndsWith: 'endsWith',
30
+ Equals: 'equals',
31
+ DoesntEqual: 'doesntEqual',
32
+ DoesntStartWith: 'doesntStartWith',
33
+ DoesntContain: 'doesntContain',
34
+ DoesntEndWith: 'doesntEndWith',
35
+ Like: 'like',
36
+ };
37
+ /**
38
+ * Different numeric operators that can be used with numeric filters
39
+ */
40
+ exports.NumericOperators = {
41
+ Equals: 'equals',
42
+ DoesntEqual: 'doesntEqual',
43
+ From: 'from',
44
+ FromNotEqual: 'fromNotEqual',
45
+ To: 'to',
46
+ ToNotEqual: 'toNotEqual',
47
+ };
48
+ /**
49
+ * Different date operators that can be used with date filters
50
+ *
51
+ * @internal
52
+ */
53
+ exports.DateOperators = {
54
+ From: 'from',
55
+ To: 'to',
56
+ Last: 'last',
57
+ Next: 'next',
58
+ Anchor: 'Anchor',
59
+ };
60
+ /**
61
+ * Different logical operators that can be used with logical filters
62
+ *
63
+ * @internal
64
+ */
65
+ exports.LogicalOperators = {
66
+ Union: 'or',
67
+ Intersection: 'and',
68
+ Exclude: 'exclude',
69
+ };
70
+ /**
71
+ * Different ranking operators that can be used with ranking filter
72
+ *
73
+ * @internal
74
+ */
75
+ exports.RankingOperators = {
76
+ Top: 'top',
77
+ Bottom: 'bottom',
78
+ };
79
+ /**
80
+ * Different filter types
81
+ *
82
+ * @internal
83
+ */
84
+ exports.FilterTypes = {
85
+ logicalAttribute: 'logicalAttribute',
86
+ members: 'members',
87
+ exclude: 'exclude',
88
+ measure: 'measure',
89
+ ranking: 'ranking',
90
+ text: 'text',
91
+ numeric: 'numeric',
92
+ date: 'date',
93
+ relativeDate: 'relativeDate',
94
+ cascading: 'cascading',
95
+ advanced: 'advanced',
96
+ };
97
+ // CLASSES
98
+ /**
99
+ * base implementation for filter classes
100
+ *
101
+ * @internal
102
+ */
103
+ class AbstractFilter extends base_js_1.DimensionalElement {
104
+ constructor(att, filterType, guid) {
105
+ super('filter', types_js_1.MetadataTypes.Filter);
106
+ this.filterType = filterType;
107
+ AbstractFilter.checkAttributeSupport(att);
108
+ this.attribute = att;
109
+ this.guid = guid || (0, utils_js_1.guidFast)(13);
110
+ this.disabled = false;
111
+ }
112
+ /**
113
+ * Boolean flag whether the filter is disabled
114
+ *
115
+ * @internal
116
+ */
117
+ get disabled() {
118
+ return this._disabled;
119
+ }
120
+ set disabled(value) {
121
+ this._disabled = value;
122
+ }
123
+ get name() {
124
+ return (0, object_hash_1.default)(this.jaql());
125
+ }
126
+ /**
127
+ * Gets a serializable representation of the element
128
+ */
129
+ serializable() {
130
+ const result = super.serializable();
131
+ result.filterType = this.filterType;
132
+ result.attribute = this.attribute.serializable();
133
+ return result;
134
+ }
135
+ /**
136
+ * Gets the JAQL representation of this instance
137
+ *
138
+ * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element
139
+ */
140
+ jaql(nested) {
141
+ if (this.disabled) {
142
+ return AbstractFilter.disabledJaql(nested);
143
+ }
144
+ const result = this.attribute.jaql(false);
145
+ const level = this.attribute;
146
+ if (level.getFormat && level.getFormat() !== undefined) {
147
+ const granularityJaql = level.translateGranularityToJaql();
148
+ result.format = {
149
+ mask: {
150
+ [granularityJaql.level]: level.getFormat(),
151
+ },
152
+ };
153
+ }
154
+ result.jaql.filter = this.filterJaql();
155
+ if (this.isScope) {
156
+ result.panel = 'scope';
157
+ }
158
+ return nested === true ? result.jaql : result;
159
+ }
160
+ static checkAttributeSupport(attribute) {
161
+ const { granularity } = attribute;
162
+ if (granularity === types_js_1.DateLevels.Hours ||
163
+ granularity === types_js_1.DateLevels.MinutesRoundTo30 ||
164
+ granularity === types_js_1.DateLevels.MinutesRoundTo15) {
165
+ throw new translatable_error_js_1.TranslatableError('errors.filter.unsupportedDatetimeLevel');
166
+ }
167
+ }
168
+ static disabledJaql(nested) {
169
+ return nested ? { filter: {} } : { jaql: { filter: {} } };
170
+ }
171
+ }
172
+ /**
173
+ * @internal
174
+ */
175
+ class LogicalAttributeFilter extends AbstractFilter {
176
+ constructor(filters, operator, guid) {
177
+ super(filters[0].attribute, exports.FilterTypes.logicalAttribute, guid);
178
+ this.operator = operator;
179
+ this.filters = filters;
180
+ }
181
+ /**
182
+ * gets the element's ID
183
+ */
184
+ get id() {
185
+ return `${this.operator}_${this.filters.map((f) => f.id).join()}`;
186
+ }
187
+ /**
188
+ * Gets a serializable representation of the element
189
+ */
190
+ serializable() {
191
+ const result = super.serializable();
192
+ result.operator = this.operator;
193
+ result.filters = this.filters.map((f) => f.serializable());
194
+ return result;
195
+ }
196
+ /**
197
+ * Gets JAQL representing this Filter instance
198
+ */
199
+ filterJaql() {
200
+ const result = {};
201
+ result[this.operator] = this.filters.map((f) => f.filterJaql());
202
+ return result;
203
+ }
204
+ }
205
+ exports.LogicalAttributeFilter = LogicalAttributeFilter;
206
+ /**
207
+ * @internal
208
+ */
209
+ class MembersFilter extends AbstractFilter {
210
+ constructor(attribute, members, _deactivatedMembers, guid) {
211
+ super(attribute, exports.FilterTypes.members, guid);
212
+ this.members = members !== null && members !== void 0 ? members : [];
213
+ this._deactivatedMembers = _deactivatedMembers !== null && _deactivatedMembers !== void 0 ? _deactivatedMembers : [];
214
+ if (this.members.filter((m) => m === null || m === undefined).length > 0) {
215
+ throw new translatable_error_js_1.TranslatableError('errors.filter.membersFilterNullMember', {
216
+ attributeId: attribute.id,
217
+ });
218
+ }
219
+ }
220
+ /**
221
+ * gets the element's ID
222
+ */
223
+ get id() {
224
+ return `${this.attribute.id}_${this.members.map((m) => m.toString()).join()}`;
225
+ }
226
+ /**
227
+ * Gets a serializable representation of the element
228
+ */
229
+ serializable() {
230
+ const result = super.serializable();
231
+ result.members = this.members;
232
+ return result;
233
+ }
234
+ /**
235
+ * Gets JAQL representing this Filter instance
236
+ */
237
+ filterJaql() {
238
+ return {
239
+ members: this.members.map((m) => m.toString()),
240
+ };
241
+ }
242
+ }
243
+ exports.MembersFilter = MembersFilter;
244
+ /**
245
+ * @internal
246
+ */
247
+ class CascadingFilter extends AbstractFilter {
248
+ constructor(filters, guid) {
249
+ super(filters[0].attribute, exports.FilterTypes.cascading, guid);
250
+ this.filters = filters;
251
+ }
252
+ /**
253
+ * gets the element's ID
254
+ */
255
+ get id() {
256
+ return `${this.filterType}_${this.filters.map((f) => f.id).join()}`;
257
+ }
258
+ get disabled() {
259
+ return super.disabled;
260
+ }
261
+ set disabled(value) {
262
+ super.disabled = value;
263
+ if (this.filters) {
264
+ this.filters.forEach((filter) => {
265
+ filter.disabled = value;
266
+ });
267
+ }
268
+ }
269
+ /**
270
+ * Gets a serializable representation of the element
271
+ */
272
+ serializable() {
273
+ const result = super.serializable();
274
+ result.filters = this.filters.map((f) => f.serializable());
275
+ return result;
276
+ }
277
+ /**
278
+ * Gets JAQL representing this Filter instance
279
+ */
280
+ filterJaql() {
281
+ // return empty object as jaql is handled by jaql() method
282
+ return {};
283
+ }
284
+ jaql(nested) {
285
+ if (this.disabled) {
286
+ return AbstractFilter.disabledJaql(nested);
287
+ }
288
+ // return jaql of all level filters treated as scope filters
289
+ return this.filters.map((f) => {
290
+ f.isScope = true;
291
+ return f.jaql(nested);
292
+ });
293
+ }
294
+ }
295
+ exports.CascadingFilter = CascadingFilter;
296
+ /**
297
+ * @internal
298
+ */
299
+ class ExcludeFilter extends AbstractFilter {
300
+ constructor(filter, input, guid) {
301
+ super(filter.attribute, exports.FilterTypes.exclude, guid);
302
+ this.input = input;
303
+ this.filter = filter;
304
+ }
305
+ /**
306
+ * gets the element's ID
307
+ */
308
+ get id() {
309
+ let result = `exclude_${this.filter.id}`;
310
+ if (this.input) {
311
+ result += '_from_' + this.input.id;
312
+ }
313
+ return result;
314
+ }
315
+ /**
316
+ * Gets a serializable representation of the element
317
+ */
318
+ serializable() {
319
+ const result = super.serializable();
320
+ result.filter = this.filter.serializable();
321
+ if (this.input) {
322
+ result.input = this.input.serializable();
323
+ }
324
+ return result;
325
+ }
326
+ /**
327
+ * Gets JAQL representing this Filter instance
328
+ */
329
+ filterJaql() {
330
+ const result = {};
331
+ const exclusion = this.filter.filterJaql();
332
+ if (this.input) {
333
+ result.filter = this.input.filterJaql();
334
+ result.filter.filter = { exclude: exclusion };
335
+ }
336
+ else {
337
+ result.exclude = exclusion;
338
+ }
339
+ return result;
340
+ }
341
+ }
342
+ exports.ExcludeFilter = ExcludeFilter;
343
+ /**
344
+ * @internal
345
+ */
346
+ class DoubleOperatorFilter extends AbstractFilter {
347
+ constructor(att, filterType, operatorA, valueA, operatorB, valueB, guid) {
348
+ super(att, filterType, guid);
349
+ if (operatorA && valueA !== undefined) {
350
+ this.valueA = valueA;
351
+ this.operatorA = operatorA;
352
+ }
353
+ if (operatorB && valueB !== undefined) {
354
+ this.operatorB = operatorB;
355
+ this.valueB = valueB;
356
+ }
357
+ }
358
+ /**
359
+ * gets the element's ID
360
+ */
361
+ get id() {
362
+ let result = `${this.attribute.id}`;
363
+ if (this.operatorA && this.valueA !== undefined) {
364
+ result += `_${this.operatorA}:${this.valueA}`;
365
+ }
366
+ if (this.operatorB && this.valueB !== undefined) {
367
+ result += `_${this.operatorB}:${this.valueB}`;
368
+ }
369
+ return result;
370
+ }
371
+ /**
372
+ * Gets a serializable representation of the element
373
+ */
374
+ serializable() {
375
+ const result = super.serializable();
376
+ if (this.operatorA) {
377
+ result.operatorA = this.operatorA;
378
+ }
379
+ if (this.operatorB) {
380
+ result.operatorB = this.operatorB;
381
+ }
382
+ if (this.valueA !== undefined) {
383
+ result.valueA = this.valueA;
384
+ }
385
+ if (this.valueB !== undefined) {
386
+ result.valueB = this.valueB;
387
+ }
388
+ return result;
389
+ }
390
+ /**
391
+ * Gets JAQL representing this Filter instance
392
+ */
393
+ filterJaql() {
394
+ const result = {};
395
+ if (this.operatorA && this.valueA !== undefined) {
396
+ result[this.operatorA] = this.valueA;
397
+ }
398
+ if (this.operatorB && this.valueB !== undefined) {
399
+ result[this.operatorB] = this.valueB;
400
+ }
401
+ return result;
402
+ }
403
+ }
404
+ exports.DoubleOperatorFilter = DoubleOperatorFilter;
405
+ /**
406
+ * @internal
407
+ */
408
+ class MeasureFilter extends DoubleOperatorFilter {
409
+ constructor(att, measure, operatorA, valueA, operatorB, valueB, guid) {
410
+ super(att, exports.FilterTypes.measure, operatorA, valueA, operatorB, valueB, guid);
411
+ this.measure = measure;
412
+ }
413
+ /**
414
+ * gets the element's ID
415
+ */
416
+ get id() {
417
+ let result = `${this.attribute.id}_${this.measure.id}`;
418
+ if (this.operatorA && this.valueA !== undefined) {
419
+ result += `_${this.operatorA}:${this.valueA}`;
420
+ }
421
+ if (this.operatorB && this.valueB !== undefined) {
422
+ result += `_${this.operatorB}${this.valueB}`;
423
+ }
424
+ return result;
425
+ }
426
+ /**
427
+ * Gets a serializable representation of the element
428
+ */
429
+ serializable() {
430
+ const result = super.serializable();
431
+ result.measure = this.measure.serializable();
432
+ return result;
433
+ }
434
+ jaql(nested) {
435
+ if (this.disabled) {
436
+ return AbstractFilter.disabledJaql(nested);
437
+ }
438
+ const result = super.jaql(nested);
439
+ if (this.measure instanceof measures_js_1.DimensionalBaseMeasure) {
440
+ Object.entries(this.measure.jaql().jaql).forEach(([key, value]) => {
441
+ result.jaql[key] = value;
442
+ });
443
+ }
444
+ return result;
445
+ }
446
+ }
447
+ exports.MeasureFilter = MeasureFilter;
448
+ /**
449
+ * @internal
450
+ */
451
+ class RankingFilter extends AbstractFilter {
452
+ constructor(att, measure, operator, count, guid) {
453
+ super(att, exports.FilterTypes.ranking, guid);
454
+ this.count = count;
455
+ this.operator = operator;
456
+ this.measure = measure;
457
+ }
458
+ /**
459
+ * gets the element's ID
460
+ */
461
+ get id() {
462
+ return `${this.operator}_${this.count}_${this.attribute.id}_by_${this.measure.id}`;
463
+ }
464
+ /**
465
+ * Gets a serializable representation of the element
466
+ */
467
+ serializable() {
468
+ const result = super.serializable();
469
+ result.count = this.count;
470
+ result.operator = this.operator;
471
+ result.measure = this.measure.serializable();
472
+ return result;
473
+ }
474
+ /**
475
+ * Gets JAQL representing this Filter instance
476
+ */
477
+ filterJaql() {
478
+ const result = {};
479
+ result[this.operator] = this.count;
480
+ result.by = this.measure.jaql(true);
481
+ return result;
482
+ }
483
+ }
484
+ exports.RankingFilter = RankingFilter;
485
+ /**
486
+ * @internal
487
+ */
488
+ class NumericFilter extends DoubleOperatorFilter {
489
+ constructor(att, operatorA, valueA, operatorB, valueB, guid) {
490
+ super(att, exports.FilterTypes.numeric, operatorA, valueA, operatorB, valueB, guid);
491
+ }
492
+ }
493
+ exports.NumericFilter = NumericFilter;
494
+ /**
495
+ * @internal
496
+ */
497
+ class TextFilter extends DoubleOperatorFilter {
498
+ constructor(att, operator, value, guid) {
499
+ super(att, exports.FilterTypes.text, operator, value, undefined, undefined, guid);
500
+ }
501
+ }
502
+ exports.TextFilter = TextFilter;
503
+ /**
504
+ * @internal
505
+ */
506
+ class DateRangeFilter extends DoubleOperatorFilter {
507
+ constructor(l, valueFrom, valueTo, guid) {
508
+ super(l, exports.FilterTypes.date, exports.DateOperators.From, valueFrom, exports.DateOperators.To, valueTo, guid);
509
+ if (typeof valueFrom === 'object') {
510
+ this.valueA = valueFrom.toISOString();
511
+ }
512
+ if (typeof valueTo === 'object') {
513
+ this.valueB = valueTo.toISOString();
514
+ }
515
+ }
516
+ get level() {
517
+ return this.attribute;
518
+ }
519
+ get from() {
520
+ return this.valueA;
521
+ }
522
+ get to() {
523
+ return this.valueB;
524
+ }
525
+ /**
526
+ * Gets JAQL representing this Filter instance
527
+ */
528
+ filterJaql() {
529
+ return super.filterJaql();
530
+ }
531
+ }
532
+ exports.DateRangeFilter = DateRangeFilter;
533
+ /**
534
+ * @internal
535
+ */
536
+ class RelativeDateFilter extends AbstractFilter {
537
+ constructor(l, offset, count, operator, anchor, guid) {
538
+ super(l, exports.FilterTypes.relativeDate, guid);
539
+ if (!operator) {
540
+ operator = exports.DateOperators.Next;
541
+ }
542
+ this.anchor = anchor;
543
+ this.operator = operator;
544
+ this.offset = offset;
545
+ this.count = count;
546
+ }
547
+ get level() {
548
+ return this.attribute;
549
+ }
550
+ /**
551
+ * gets the element's ID
552
+ */
553
+ get id() {
554
+ let result = `${this.level.id}_${this.operator}_${this.offset}_${this.count}`;
555
+ if (this.anchor) {
556
+ if (typeof this.anchor === 'string') {
557
+ result += `_${this.anchor}`;
558
+ }
559
+ else if (typeof this.anchor === 'object') {
560
+ result += `_${this.anchor.toISOString()}`;
561
+ }
562
+ }
563
+ return result;
564
+ }
565
+ /**
566
+ * Gets a serializable representation of the element
567
+ */
568
+ serializable() {
569
+ const result = super.serializable();
570
+ result.offset = this.offset;
571
+ result.count = this.count;
572
+ result.operator = this.operator;
573
+ if (this.anchor) {
574
+ result.anchor = this.anchor;
575
+ }
576
+ return result;
577
+ }
578
+ /**
579
+ * Gets JAQL representing this Filter instance
580
+ *
581
+ */
582
+ filterJaql() {
583
+ const result = {};
584
+ result[this.operator] = {
585
+ offset: this.offset,
586
+ count: this.count,
587
+ };
588
+ if (this.anchor) {
589
+ if (typeof this.anchor === 'string') {
590
+ result[this.operator].anchor = this.anchor;
591
+ }
592
+ else if (typeof this.anchor === 'object') {
593
+ result[this.operator].anchor = this.anchor.toISOString();
594
+ }
595
+ }
596
+ return result;
597
+ }
598
+ }
599
+ exports.RelativeDateFilter = RelativeDateFilter;
600
+ /**
601
+ * @internal
602
+ */
603
+ class CustomFilter extends AbstractFilter {
604
+ constructor(att, jaql, guid) {
605
+ super(att, exports.FilterTypes.advanced, guid);
606
+ // remove filterType from jaql as it is not needed
607
+ delete jaql.filterType;
608
+ this.jaqlExpression = jaql;
609
+ }
610
+ /**
611
+ * gets the element's ID
612
+ */
613
+ get id() {
614
+ return `custom_${this.attribute.id}_${this.guid}`;
615
+ }
616
+ /**
617
+ * Gets JAQL representing this Filter instance
618
+ *
619
+ */
620
+ filterJaql() {
621
+ return this.jaqlExpression;
622
+ }
623
+ }
624
+ exports.CustomFilter = CustomFilter;
625
+ /**
626
+ * @param json - Filter JSON representation
627
+ * @internal
628
+ */
629
+ function createFilter(json) {
630
+ switch (json.filterType) {
631
+ case exports.FilterTypes.logicalAttribute:
632
+ return new LogicalAttributeFilter(json.filters.map((f) => createFilter(f)), json.operator);
633
+ break;
634
+ case exports.FilterTypes.members:
635
+ return new MembersFilter((0, factory_js_1.create)(json.attribute), json.members);
636
+ break;
637
+ case exports.FilterTypes.exclude:
638
+ return new ExcludeFilter(createFilter(json.filter), json.input && createFilter(json.input));
639
+ break;
640
+ case exports.FilterTypes.measure:
641
+ return new MeasureFilter((0, factory_js_1.create)(json.attribute), (0, factory_js_1.create)(json.measure), json.operatorA, json.valueA, json.operatorB, json.valueB);
642
+ break;
643
+ case exports.FilterTypes.ranking:
644
+ return new RankingFilter((0, factory_js_1.create)(json.attribute), (0, factory_js_1.create)(json.measure), json.operator, json.count);
645
+ break;
646
+ case exports.FilterTypes.numeric:
647
+ return new NumericFilter((0, factory_js_1.create)(json.attribute), json.operatorA, json.valueA, json.operatorB, json.valueB);
648
+ break;
649
+ case exports.FilterTypes.text:
650
+ return new TextFilter((0, factory_js_1.create)(json.attribute), json.operatorA, json.valueA);
651
+ break;
652
+ case exports.FilterTypes.relativeDate:
653
+ return new RelativeDateFilter((0, factory_js_1.create)(json.attribute), json.offset, json.count, json.operator, json.anchor);
654
+ break;
655
+ case exports.FilterTypes.date:
656
+ return new DateRangeFilter((0, factory_js_1.create)(json.attribute), json.valueA, json.valueB);
657
+ break;
658
+ }
659
+ throw new translatable_error_js_1.TranslatableError('errors.filter.unsupportedType', {
660
+ filterType: json.filterType,
661
+ });
662
+ }
663
+ exports.createFilter = createFilter;