@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,614 @@
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.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
+ };
96
+ // CLASSES
97
+ /**
98
+ * base implementation for filter classes
99
+ *
100
+ * @internal
101
+ */
102
+ class AbstractFilter extends base_js_1.DimensionalElement {
103
+ constructor(att, filterType, guid) {
104
+ super('filter', types_js_1.MetadataTypes.Filter);
105
+ this.filterType = filterType;
106
+ AbstractFilter.checkAttributeSupport(att);
107
+ this.attribute = att;
108
+ this.guid = guid || (0, utils_js_1.guidFast)(13);
109
+ this.disabled = false;
110
+ }
111
+ get name() {
112
+ return (0, object_hash_1.default)(this.jaql());
113
+ }
114
+ /**
115
+ * Gets a serializable representation of the element
116
+ */
117
+ serializable() {
118
+ const result = super.serializable();
119
+ result.filterType = this.filterType;
120
+ result.attribute = this.attribute.serializable();
121
+ return result;
122
+ }
123
+ /**
124
+ * Gets the JAQL representation of this instance
125
+ *
126
+ * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element
127
+ */
128
+ jaql(nested) {
129
+ if (this.disabled) {
130
+ return AbstractFilter.disabledJaql(nested);
131
+ }
132
+ const result = this.attribute.jaql(false);
133
+ const level = this.attribute;
134
+ if (level.getFormat && level.getFormat() !== undefined) {
135
+ const granularityJaql = level.translateGranularityToJaql();
136
+ result.format = {
137
+ mask: {
138
+ [granularityJaql.level]: level.getFormat(),
139
+ },
140
+ };
141
+ }
142
+ result.jaql.filter = this.filterJaql();
143
+ if (this.isScope) {
144
+ result.panel = 'scope';
145
+ }
146
+ return nested === true ? result.jaql : result;
147
+ }
148
+ static checkAttributeSupport(attribute) {
149
+ const { granularity } = attribute;
150
+ if (granularity === types_js_1.DateLevels.Hours ||
151
+ granularity === types_js_1.DateLevels.MinutesRoundTo30 ||
152
+ granularity === types_js_1.DateLevels.MinutesRoundTo15) {
153
+ throw new translatable_error_js_1.TranslatableError('errors.filter.unsupportedDatetimeLevel');
154
+ }
155
+ }
156
+ static disabledJaql(nested) {
157
+ return nested ? { filter: {} } : { jaql: { filter: {} } };
158
+ }
159
+ }
160
+ /**
161
+ * @internal
162
+ */
163
+ class LogicalAttributeFilter extends AbstractFilter {
164
+ constructor(filters, operator, guid) {
165
+ super(filters[0].attribute, exports.FilterTypes.logicalAttribute, guid);
166
+ this.operator = operator;
167
+ this.filters = filters;
168
+ }
169
+ /**
170
+ * gets the element's ID
171
+ */
172
+ get id() {
173
+ return `${this.operator}_${this.filters.map((f) => f.id).join()}`;
174
+ }
175
+ /**
176
+ * Gets a serializable representation of the element
177
+ */
178
+ serializable() {
179
+ const result = super.serializable();
180
+ result.operator = this.operator;
181
+ result.filters = this.filters.map((f) => f.serializable());
182
+ return result;
183
+ }
184
+ /**
185
+ * Gets JAQL representing this Filter instance
186
+ */
187
+ filterJaql() {
188
+ const result = {};
189
+ result[this.operator] = this.filters.map((f) => f.filterJaql());
190
+ return result;
191
+ }
192
+ }
193
+ exports.LogicalAttributeFilter = LogicalAttributeFilter;
194
+ /**
195
+ * @internal
196
+ */
197
+ class MembersFilter extends AbstractFilter {
198
+ constructor(attribute, members, guid) {
199
+ super(attribute, exports.FilterTypes.members, guid);
200
+ this.members = members !== null && members !== void 0 ? members : [];
201
+ if (this.members.filter((m) => m === null || m === undefined).length > 0) {
202
+ throw new translatable_error_js_1.TranslatableError('errors.filter.membersFilterNullMember', {
203
+ attributeId: attribute.id,
204
+ });
205
+ }
206
+ }
207
+ /**
208
+ * gets the element's ID
209
+ */
210
+ get id() {
211
+ return `${this.attribute.id}_${this.members.map((m) => m.toString()).join()}`;
212
+ }
213
+ /**
214
+ * Gets a serializable representation of the element
215
+ */
216
+ serializable() {
217
+ const result = super.serializable();
218
+ result.members = this.members;
219
+ return result;
220
+ }
221
+ /**
222
+ * Gets JAQL representing this Filter instance
223
+ */
224
+ filterJaql() {
225
+ return {
226
+ members: this.members.map((m) => m.toString()),
227
+ };
228
+ }
229
+ }
230
+ exports.MembersFilter = MembersFilter;
231
+ /**
232
+ * @internal
233
+ */
234
+ class CascadingFilter extends AbstractFilter {
235
+ constructor(filters, guid) {
236
+ super(filters[0].attribute, exports.FilterTypes.cascading, guid);
237
+ this.filters = filters;
238
+ }
239
+ /**
240
+ * gets the element's ID
241
+ */
242
+ get id() {
243
+ return `${this.filterType}_${this.filters.map((f) => f.id).join()}`;
244
+ }
245
+ /**
246
+ * Gets a serializable representation of the element
247
+ */
248
+ serializable() {
249
+ const result = super.serializable();
250
+ result.filters = this.filters.map((f) => f.serializable());
251
+ return result;
252
+ }
253
+ /**
254
+ * Gets JAQL representing this Filter instance
255
+ */
256
+ filterJaql() {
257
+ // return empty object as jaql is handled by jaql() method
258
+ return {};
259
+ }
260
+ jaql(nested) {
261
+ if (this.disabled) {
262
+ return AbstractFilter.disabledJaql(nested);
263
+ }
264
+ // return jaql of all level filters treated as scope filters
265
+ return this.filters.map((f) => {
266
+ f.isScope = true;
267
+ return f.jaql(nested);
268
+ });
269
+ }
270
+ }
271
+ exports.CascadingFilter = CascadingFilter;
272
+ /**
273
+ * @internal
274
+ */
275
+ class ExcludeFilter extends AbstractFilter {
276
+ constructor(filter, input, guid) {
277
+ super(filter.attribute, exports.FilterTypes.exclude, guid);
278
+ this.input = input;
279
+ this.filter = filter;
280
+ }
281
+ /**
282
+ * gets the element's ID
283
+ */
284
+ get id() {
285
+ let result = `exclude_${this.filter.id}`;
286
+ if (this.input) {
287
+ result += '_from_' + this.input.id;
288
+ }
289
+ return result;
290
+ }
291
+ /**
292
+ * Gets a serializable representation of the element
293
+ */
294
+ serializable() {
295
+ const result = super.serializable();
296
+ result.filter = this.filter.serializable();
297
+ if (this.input) {
298
+ result.input = this.input.serializable();
299
+ }
300
+ return result;
301
+ }
302
+ /**
303
+ * Gets JAQL representing this Filter instance
304
+ */
305
+ filterJaql() {
306
+ const result = {};
307
+ const exclusion = this.filter.filterJaql();
308
+ if (this.input) {
309
+ result.filter = this.input.filterJaql();
310
+ result.filter.filter = { exclude: exclusion };
311
+ }
312
+ else {
313
+ result.exclude = exclusion;
314
+ }
315
+ return result;
316
+ }
317
+ }
318
+ exports.ExcludeFilter = ExcludeFilter;
319
+ /**
320
+ * @internal
321
+ */
322
+ class DoubleOperatorFilter extends AbstractFilter {
323
+ constructor(att, filterType, operatorA, valueA, operatorB, valueB, guid) {
324
+ super(att, filterType, guid);
325
+ if (operatorA && valueA !== undefined) {
326
+ this.valueA = valueA;
327
+ this.operatorA = operatorA;
328
+ }
329
+ if (operatorB && valueB !== undefined) {
330
+ this.operatorB = operatorB;
331
+ this.valueB = valueB;
332
+ }
333
+ }
334
+ /**
335
+ * gets the element's ID
336
+ */
337
+ get id() {
338
+ let result = `${this.attribute.id}`;
339
+ if (this.operatorA && this.valueA !== undefined) {
340
+ result += `_${this.operatorA}:${this.valueA}`;
341
+ }
342
+ if (this.operatorB && this.valueB !== undefined) {
343
+ result += `_${this.operatorB}:${this.valueB}`;
344
+ }
345
+ return result;
346
+ }
347
+ /**
348
+ * Gets a serializable representation of the element
349
+ */
350
+ serializable() {
351
+ const result = super.serializable();
352
+ if (this.operatorA) {
353
+ result.operatorA = this.operatorA;
354
+ }
355
+ if (this.operatorB) {
356
+ result.operatorB = this.operatorB;
357
+ }
358
+ if (this.valueA !== undefined) {
359
+ result.valueA = this.valueA;
360
+ }
361
+ if (this.valueB !== undefined) {
362
+ result.valueB = this.valueB;
363
+ }
364
+ return result;
365
+ }
366
+ /**
367
+ * Gets JAQL representing this Filter instance
368
+ */
369
+ filterJaql() {
370
+ const result = {};
371
+ if (this.operatorA && this.valueA !== undefined) {
372
+ result[this.operatorA] = this.valueA;
373
+ }
374
+ if (this.operatorB && this.valueB !== undefined) {
375
+ result[this.operatorB] = this.valueB;
376
+ }
377
+ return result;
378
+ }
379
+ }
380
+ exports.DoubleOperatorFilter = DoubleOperatorFilter;
381
+ /**
382
+ * @internal
383
+ */
384
+ class MeasureFilter extends DoubleOperatorFilter {
385
+ constructor(att, measure, operatorA, valueA, operatorB, valueB, guid) {
386
+ super(att, exports.FilterTypes.measure, operatorA, valueA, operatorB, valueB, guid);
387
+ this.measure = measure;
388
+ }
389
+ /**
390
+ * gets the element's ID
391
+ */
392
+ get id() {
393
+ let result = `${this.attribute.id}_${this.measure.id}`;
394
+ if (this.operatorA && this.valueA !== undefined) {
395
+ result += `_${this.operatorA}:${this.valueA}`;
396
+ }
397
+ if (this.operatorB && this.valueB !== undefined) {
398
+ result += `_${this.operatorB}${this.valueB}`;
399
+ }
400
+ return result;
401
+ }
402
+ /**
403
+ * Gets a serializable representation of the element
404
+ */
405
+ serializable() {
406
+ const result = super.serializable();
407
+ result.measure = this.measure.serializable();
408
+ return result;
409
+ }
410
+ jaql(nested) {
411
+ if (this.disabled) {
412
+ return AbstractFilter.disabledJaql(nested);
413
+ }
414
+ const result = super.jaql(nested);
415
+ if (this.measure instanceof measures_js_1.DimensionalBaseMeasure) {
416
+ Object.entries(this.measure.jaql().jaql).forEach(([key, value]) => {
417
+ result.jaql[key] = value;
418
+ });
419
+ }
420
+ return result;
421
+ }
422
+ }
423
+ exports.MeasureFilter = MeasureFilter;
424
+ /**
425
+ * @internal
426
+ */
427
+ class RankingFilter extends AbstractFilter {
428
+ constructor(att, measure, operator, count, guid) {
429
+ super(att, exports.FilterTypes.ranking, guid);
430
+ this.count = count;
431
+ this.operator = operator;
432
+ this.measure = measure;
433
+ }
434
+ /**
435
+ * gets the element's ID
436
+ */
437
+ get id() {
438
+ return `${this.operator}_${this.count}_${this.attribute.id}_by_${this.measure.id}`;
439
+ }
440
+ /**
441
+ * Gets a serializable representation of the element
442
+ */
443
+ serializable() {
444
+ const result = super.serializable();
445
+ result.count = this.count;
446
+ result.operator = this.operator;
447
+ result.measure = this.measure.serializable();
448
+ return result;
449
+ }
450
+ /**
451
+ * Gets JAQL representing this Filter instance
452
+ */
453
+ filterJaql() {
454
+ const result = {};
455
+ result[this.operator] = this.count;
456
+ result.by = this.measure.jaql(true);
457
+ return result;
458
+ }
459
+ }
460
+ exports.RankingFilter = RankingFilter;
461
+ /**
462
+ * @internal
463
+ */
464
+ class NumericFilter extends DoubleOperatorFilter {
465
+ constructor(att, operatorA, valueA, operatorB, valueB, guid) {
466
+ super(att, exports.FilterTypes.numeric, operatorA, valueA, operatorB, valueB, guid);
467
+ }
468
+ }
469
+ exports.NumericFilter = NumericFilter;
470
+ /**
471
+ * @internal
472
+ */
473
+ class TextFilter extends DoubleOperatorFilter {
474
+ constructor(att, operator, value, guid) {
475
+ super(att, exports.FilterTypes.text, operator, value, undefined, undefined, guid);
476
+ }
477
+ }
478
+ exports.TextFilter = TextFilter;
479
+ /**
480
+ * @internal
481
+ */
482
+ class DateRangeFilter extends DoubleOperatorFilter {
483
+ constructor(l, valueFrom, valueTo, guid) {
484
+ super(l, exports.FilterTypes.date, exports.DateOperators.From, valueFrom, exports.DateOperators.To, valueTo, guid);
485
+ if (typeof valueFrom === 'object') {
486
+ this.valueA = valueFrom.toISOString();
487
+ }
488
+ if (typeof valueTo === 'object') {
489
+ this.valueB = valueTo.toISOString();
490
+ }
491
+ }
492
+ get level() {
493
+ return this.attribute;
494
+ }
495
+ get from() {
496
+ return this.valueA;
497
+ }
498
+ get to() {
499
+ return this.valueB;
500
+ }
501
+ /**
502
+ * Gets JAQL representing this Filter instance
503
+ */
504
+ filterJaql() {
505
+ return super.filterJaql();
506
+ }
507
+ }
508
+ exports.DateRangeFilter = DateRangeFilter;
509
+ /**
510
+ * @internal
511
+ */
512
+ class RelativeDateFilter extends AbstractFilter {
513
+ constructor(l, offset, count, operator, anchor, guid) {
514
+ super(l, exports.FilterTypes.relativeDate, guid);
515
+ if (!operator) {
516
+ operator = exports.DateOperators.Next;
517
+ }
518
+ this.anchor = anchor;
519
+ this.operator = operator;
520
+ this.offset = offset;
521
+ this.count = count;
522
+ }
523
+ get level() {
524
+ return this.attribute;
525
+ }
526
+ /**
527
+ * gets the element's ID
528
+ */
529
+ get id() {
530
+ let result = `${this.level.id}_${this.operator}_${this.offset}_${this.count}`;
531
+ if (this.anchor) {
532
+ if (typeof this.anchor === 'string') {
533
+ result += `_${this.anchor}`;
534
+ }
535
+ else if (typeof this.anchor === 'object') {
536
+ result += `_${this.anchor.toISOString()}`;
537
+ }
538
+ }
539
+ return result;
540
+ }
541
+ /**
542
+ * Gets a serializable representation of the element
543
+ */
544
+ serializable() {
545
+ const result = super.serializable();
546
+ result.offset = this.offset;
547
+ result.count = this.count;
548
+ result.operator = this.operator;
549
+ if (this.anchor) {
550
+ result.anchor = this.anchor;
551
+ }
552
+ return result;
553
+ }
554
+ /**
555
+ * Gets JAQL representing this Filter instance
556
+ *
557
+ */
558
+ filterJaql() {
559
+ const result = {};
560
+ result[this.operator] = {
561
+ offset: this.offset,
562
+ count: this.count,
563
+ };
564
+ if (this.anchor) {
565
+ if (typeof this.anchor === 'string') {
566
+ result[this.operator].anchor = this.anchor;
567
+ }
568
+ else if (typeof this.anchor === 'object') {
569
+ result[this.operator].anchor = this.anchor.toISOString();
570
+ }
571
+ }
572
+ return result;
573
+ }
574
+ }
575
+ exports.RelativeDateFilter = RelativeDateFilter;
576
+ /**
577
+ * @param json - Filter JSON representation
578
+ * @internal
579
+ */
580
+ function createFilter(json) {
581
+ switch (json.filterType) {
582
+ case exports.FilterTypes.logicalAttribute:
583
+ return new LogicalAttributeFilter(json.filters.map((f) => createFilter(f)), json.operator);
584
+ break;
585
+ case exports.FilterTypes.members:
586
+ return new MembersFilter((0, factory_js_1.create)(json.attribute), json.members);
587
+ break;
588
+ case exports.FilterTypes.exclude:
589
+ return new ExcludeFilter(createFilter(json.filter), json.input && createFilter(json.input));
590
+ break;
591
+ case exports.FilterTypes.measure:
592
+ 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);
593
+ break;
594
+ case exports.FilterTypes.ranking:
595
+ return new RankingFilter((0, factory_js_1.create)(json.attribute), (0, factory_js_1.create)(json.measure), json.operator, json.count);
596
+ break;
597
+ case exports.FilterTypes.numeric:
598
+ return new NumericFilter((0, factory_js_1.create)(json.attribute), json.operatorA, json.valueA, json.operatorB, json.valueB);
599
+ break;
600
+ case exports.FilterTypes.text:
601
+ return new TextFilter((0, factory_js_1.create)(json.attribute), json.operatorA, json.valueA);
602
+ break;
603
+ case exports.FilterTypes.relativeDate:
604
+ return new RelativeDateFilter((0, factory_js_1.create)(json.attribute), json.offset, json.count, json.operator, json.anchor);
605
+ break;
606
+ case exports.FilterTypes.date:
607
+ return new DateRangeFilter((0, factory_js_1.create)(json.attribute), json.valueA, json.valueB);
608
+ break;
609
+ }
610
+ throw new translatable_error_js_1.TranslatableError('errors.filter.unsupportedType', {
611
+ filterType: json.filterType,
612
+ });
613
+ }
614
+ exports.createFilter = createFilter;