@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,623 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
27
+ /* eslint-disable vitest/expect-expect */
28
+ const vitest_1 = require("vitest");
29
+ const filter_from_jaql_util_js_1 = require("./filter-from-jaql-util.js");
30
+ const filterFactory = __importStar(require("../factory.js"));
31
+ const types_js_1 = require("./types.js");
32
+ const attribute_measure_util_js_1 = require("./attribute-measure-util.js");
33
+ const condition_filter_util_js_1 = require("./condition-filter-util.js");
34
+ const filter_from_jaql_util_js_2 = require("./filter-from-jaql-util.js");
35
+ const filter_code_util_js_1 = require("./filter-code-util.js");
36
+ (0, vitest_1.describe)('filter-from-jaql-util', () => {
37
+ (0, vitest_1.describe)('createFilterFromJaqlInternal', () => {
38
+ const guid = 'instanceid';
39
+ const expectEqualFilters = (actual, expected) => {
40
+ // delete compose code
41
+ delete actual.composeCode;
42
+ expect(Object.assign({}, actual)).toEqual(Object.assign({}, expected));
43
+ expect(actual.serializable()).toBeDefined();
44
+ };
45
+ (0, vitest_1.describe)('MembersFilter', () => {
46
+ it('should handle include all', () => {
47
+ const jaql = {
48
+ table: 'Category',
49
+ column: 'Category',
50
+ dim: '[Category.Category]',
51
+ datatype: 'text',
52
+ filter: {
53
+ explicit: true,
54
+ multiSelection: true,
55
+ all: true,
56
+ },
57
+ title: 'Category',
58
+ };
59
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
60
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
61
+ const expectedFilter = filterFactory.members(attribute, [], [], guid);
62
+ expectEqualFilters(filter, expectedFilter);
63
+ });
64
+ it('should handle members text', () => {
65
+ const jaql = {
66
+ table: 'Category',
67
+ column: 'Category',
68
+ dim: '[Category.Category]',
69
+ datatype: 'text',
70
+ filter: {
71
+ explicit: true,
72
+ multiSelection: true,
73
+ members: ['Cell Phones', 'GPS Devices'],
74
+ },
75
+ title: 'Category',
76
+ };
77
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
78
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
79
+ const expectedFilter = filterFactory.members(attribute, jaql.filter.members, [], guid);
80
+ expectEqualFilters(filter, expectedFilter);
81
+ });
82
+ test('should handle members datetime', () => {
83
+ [
84
+ {
85
+ title: 'Years',
86
+ table: 'Commerce',
87
+ column: 'Date',
88
+ dim: '[Commerce.Date (Calendar)]',
89
+ datatype: 'datetime',
90
+ level: 'years',
91
+ filter: {
92
+ explicit: true,
93
+ multiSelection: true,
94
+ members: ['2013-01-01T00:00:00', '2011-01-01T00:00:00'],
95
+ },
96
+ },
97
+ {
98
+ datasource: {
99
+ title: 'Sample ECommerce',
100
+ fullname: 'LocalHost/Sample ECommerce',
101
+ id: 'localhost_aSampleIAAaECommerce',
102
+ address: 'LocalHost',
103
+ database: 'aSampleIAAaECommerce',
104
+ },
105
+ column: 'Date',
106
+ dim: '[Commerce.Date (Calendar)]',
107
+ datatype: 'datetime',
108
+ level: 'years',
109
+ title: 'YEARS',
110
+ collapsed: true,
111
+ isDashboardFilter: true,
112
+ filter: {
113
+ explicit: true,
114
+ multiSelection: true,
115
+ members: ['2013-01-01T00:00:00'],
116
+ },
117
+ },
118
+ ].forEach((jaql) => {
119
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
120
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
121
+ const expectedFilter = filterFactory.members(attribute, jaql.filter.members, [], guid);
122
+ expectEqualFilters(filter, expectedFilter);
123
+ });
124
+ });
125
+ test('should handle JAQL without table name', () => {
126
+ const jaql = {
127
+ column: 'Category',
128
+ dim: '[Category.Category]',
129
+ datatype: 'text',
130
+ filter: {
131
+ explicit: true,
132
+ multiSelection: true,
133
+ members: ['Cell Phones', 'GPS Devices'],
134
+ },
135
+ title: 'Category',
136
+ };
137
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
138
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
139
+ const expectedFilter = filterFactory.members(attribute, jaql.filter.members, [], guid);
140
+ expectEqualFilters(filter, expectedFilter);
141
+ });
142
+ it('should handle deactivated members', () => {
143
+ const jaql = {
144
+ datasource: {
145
+ title: 'Sample ECommerce',
146
+ fullname: 'LocalHost/Sample ECommerce',
147
+ id: 'localhost_aSampleIAAaECommerce',
148
+ address: 'LocalHost',
149
+ database: 'aSampleIAAaECommerce',
150
+ },
151
+ column: 'Country',
152
+ dim: '[country.Country]',
153
+ datatype: 'text',
154
+ title: 'COUNTRY',
155
+ collapsed: true,
156
+ isDashboardFilter: true,
157
+ filter: {
158
+ explicit: true,
159
+ multiSelection: true,
160
+ members: ['Albania', 'Algeria', 'Angola'],
161
+ filter: {
162
+ turnedOff: true,
163
+ exclude: {
164
+ members: ['Angola'],
165
+ },
166
+ },
167
+ },
168
+ };
169
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
170
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
171
+ const expectedFilter = filterFactory.members(attribute, ['Albania', 'Algeria'], ['Angola'], guid);
172
+ expectEqualFilters(filter, expectedFilter);
173
+ });
174
+ });
175
+ (0, vitest_1.describe)('NumericFilter', () => {
176
+ test('should handle unary operator for number', () => {
177
+ [
178
+ { operator: types_js_1.ConditionFilterType.GREATER_THAN, factoryFunc: filterFactory.greaterThan },
179
+ {
180
+ operator: types_js_1.ConditionFilterType.GREATER_THAN_OR_EQUAL,
181
+ factoryFunc: filterFactory.greaterThanOrEqual,
182
+ },
183
+ { operator: types_js_1.ConditionFilterType.EQUALS, factoryFunc: filterFactory.equals },
184
+ { operator: types_js_1.ConditionFilterType.LESS_THAN, factoryFunc: filterFactory.lessThan },
185
+ {
186
+ operator: types_js_1.ConditionFilterType.LESS_THAN_OR_EQUAL,
187
+ factoryFunc: filterFactory.lessThanOrEqual,
188
+ },
189
+ ].forEach((test) => {
190
+ const jaql = {
191
+ table: 'Commerce',
192
+ column: 'Revenue',
193
+ datatype: 'numeric',
194
+ dim: '[Commerce.Revenue]',
195
+ title: 'Revenue',
196
+ filter: {
197
+ [test.operator]: 1000,
198
+ },
199
+ };
200
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
201
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
202
+ const expectedFilter = test.factoryFunc(attribute, jaql.filter[test.operator], guid);
203
+ expectEqualFilters(filter, expectedFilter);
204
+ });
205
+ });
206
+ test('should handle unary operator for string', () => {
207
+ [
208
+ { operator: types_js_1.ConditionFilterType.EQUALS, factoryFunc: filterFactory.equals },
209
+ { operator: types_js_1.ConditionFilterType.STARTS_WITH, factoryFunc: filterFactory.startsWith },
210
+ {
211
+ operator: types_js_1.ConditionFilterType.DOESNT_START_WITH,
212
+ factoryFunc: filterFactory.doesntStartWith,
213
+ },
214
+ {
215
+ operator: types_js_1.ConditionFilterType.ENDS_WITH,
216
+ factoryFunc: filterFactory.endsWith,
217
+ },
218
+ {
219
+ operator: types_js_1.ConditionFilterType.DOESNT_END_WITH,
220
+ factoryFunc: filterFactory.doesntEndWith,
221
+ },
222
+ {
223
+ operator: types_js_1.ConditionFilterType.CONTAINS,
224
+ factoryFunc: filterFactory.contains,
225
+ },
226
+ {
227
+ operator: types_js_1.ConditionFilterType.DOESNT_CONTAIN,
228
+ factoryFunc: filterFactory.doesntContain,
229
+ },
230
+ ].forEach((test) => {
231
+ const jaql = {
232
+ table: 'Country',
233
+ column: 'Country',
234
+ datatype: 'text',
235
+ dim: '[Country.Country]',
236
+ title: 'Country',
237
+ filter: {
238
+ [test.operator]: 'ABC',
239
+ },
240
+ };
241
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
242
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
243
+ const expectedFilter = test.factoryFunc(attribute, jaql.filter[test.operator], guid);
244
+ expectEqualFilters(filter, expectedFilter);
245
+ });
246
+ });
247
+ test('should handle binary operator', () => {
248
+ [{ operator: types_js_1.ConditionFilterType.BETWEEN, factoryFunc: filterFactory.between }].forEach((test) => {
249
+ const jaql = {
250
+ table: 'Commerce',
251
+ column: 'Revenue',
252
+ datatype: 'numeric',
253
+ dim: '[Commerce.Revenue]',
254
+ title: 'Revenue',
255
+ filter: {
256
+ from: 1000,
257
+ to: 2000,
258
+ },
259
+ };
260
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
261
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
262
+ const expectedFilter = test.factoryFunc(attribute, jaql.filter.from, jaql.filter.to, guid);
263
+ expectEqualFilters(filter, expectedFilter);
264
+ });
265
+ });
266
+ test('should handle not between operator', () => {
267
+ const jaql = {
268
+ table: 'Commerce',
269
+ column: 'Revenue',
270
+ datatype: 'numeric',
271
+ dim: '[Commerce.Revenue]',
272
+ title: 'Revenue',
273
+ filter: {
274
+ exclude: {
275
+ from: 1000,
276
+ to: 2000,
277
+ },
278
+ },
279
+ };
280
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
281
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
282
+ const expectedFilter = filterFactory.exclude(filterFactory.between(attribute, jaql.filter.exclude.from, jaql.filter.exclude.to, guid), undefined, guid);
283
+ expectEqualFilters(filter.filter, expectedFilter.filter);
284
+ expect(filter.serializable()).toBeDefined();
285
+ expect(filter.id).toEqual(expectedFilter.id);
286
+ });
287
+ });
288
+ (0, vitest_1.describe)('RelativeDateFilter', () => {
289
+ test('should handle dateRelativeFrom', () => {
290
+ [
291
+ {
292
+ jaql: {
293
+ title: 'Years',
294
+ table: 'Commerce',
295
+ column: 'Date',
296
+ dim: '[Commerce.Date (Calendar)]',
297
+ datatype: 'datetime',
298
+ level: 'months',
299
+ filter: {
300
+ next: {
301
+ count: 18,
302
+ offset: 0,
303
+ anchor: '2011-01',
304
+ },
305
+ },
306
+ },
307
+ factoryFunc: filterFactory.dateRelativeFrom,
308
+ },
309
+ ].forEach(({ jaql, factoryFunc }) => {
310
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
311
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
312
+ const expectedFilter = factoryFunc(attribute, jaql.filter.next.offset, jaql.filter.next.count, jaql.filter.next.anchor, guid);
313
+ expectEqualFilters(filter, expectedFilter);
314
+ expect(filter.serializable()).toBeDefined();
315
+ expect(filter.jaql().jaql).toEqual(expectedFilter.jaql().jaql);
316
+ });
317
+ });
318
+ test('should handle dateRelativeTo', () => {
319
+ [
320
+ {
321
+ jaql: {
322
+ title: 'Years',
323
+ table: 'Commerce',
324
+ column: 'Date',
325
+ dim: '[Commerce.Date (Calendar)]',
326
+ datatype: 'datetime',
327
+ level: 'months',
328
+ filter: {
329
+ last: {
330
+ count: 18,
331
+ offset: 0,
332
+ anchor: '2011-01',
333
+ },
334
+ },
335
+ },
336
+ factoryFunc: filterFactory.dateRelativeTo,
337
+ },
338
+ ].forEach(({ jaql, factoryFunc }) => {
339
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
340
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
341
+ const expectedFilter = factoryFunc(attribute, jaql.filter.last.offset, jaql.filter.last.count, jaql.filter.last.anchor, guid);
342
+ expectEqualFilters(filter, expectedFilter);
343
+ });
344
+ });
345
+ });
346
+ (0, vitest_1.describe)('DateRangeFilter', () => {
347
+ test('should handle', () => {
348
+ const jaql = {
349
+ title: 'Years',
350
+ table: 'Commerce',
351
+ column: 'Date',
352
+ dim: '[Commerce.Date (Calendar)]',
353
+ datatype: 'datetime',
354
+ level: 'years',
355
+ filter: {
356
+ from: '2010-01-01',
357
+ to: '2012-01-01',
358
+ },
359
+ };
360
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
361
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
362
+ const expectedFilter = filterFactory.dateRange(attribute, '2010-01-01', '2012-01-01', guid);
363
+ expectEqualFilters(filter, expectedFilter);
364
+ expect(filter.from).toBeDefined();
365
+ expect(filter.to).toBeDefined();
366
+ expect(filter.level).toBeDefined();
367
+ });
368
+ });
369
+ (0, vitest_1.describe)('RankingFilter', () => {
370
+ it('should handle top', () => {
371
+ const jaql = {
372
+ table: 'Brand',
373
+ column: 'Brand',
374
+ datatype: 'text',
375
+ title: 'Top 10 Brand by Total Revenue',
376
+ dim: '[Brand.Brand]',
377
+ filter: {
378
+ top: 10,
379
+ by: {
380
+ table: 'Commerce',
381
+ column: 'Revenue',
382
+ datatype: 'numeric',
383
+ title: 'sum Revenue',
384
+ dim: '[Commerce.Revenue]',
385
+ agg: 'sum',
386
+ },
387
+ },
388
+ };
389
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
390
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
391
+ const measure = (0, attribute_measure_util_js_1.createMeasureFromRankingFilterJaql)(jaql.filter.by);
392
+ const expectedFilter = filterFactory.topRanking(attribute, measure, jaql.filter.top, guid);
393
+ expectEqualFilters(filter, expectedFilter);
394
+ });
395
+ it('should handle bottom', () => {
396
+ const jaql = {
397
+ table: 'Brand',
398
+ column: 'Brand',
399
+ datatype: 'text',
400
+ title: 'Bottom 10 Brand by Total Revenue',
401
+ dim: '[Brand.Brand]',
402
+ filter: {
403
+ bottom: 10,
404
+ by: {
405
+ table: 'Commerce',
406
+ column: 'Revenue',
407
+ datatype: 'numeric',
408
+ title: 'sum Revenue',
409
+ dim: '[Commerce.Revenue]',
410
+ agg: 'sum',
411
+ },
412
+ },
413
+ };
414
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
415
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
416
+ const measure = (0, attribute_measure_util_js_1.createMeasureFromRankingFilterJaql)(jaql.filter.by);
417
+ const expectedFilter = filterFactory.bottomRanking(attribute, measure, jaql.filter.bottom, guid);
418
+ expectEqualFilters(filter, expectedFilter);
419
+ });
420
+ });
421
+ (0, vitest_1.describe)('LogicalAttributeFilter', () => {
422
+ it('should handle or', () => {
423
+ const jaql = {
424
+ table: 'Brand',
425
+ column: 'Brand',
426
+ datatype: 'text',
427
+ title: 'Brand',
428
+ dim: '[Brand.Brand]',
429
+ filter: {
430
+ or: [
431
+ {
432
+ startsWith: 'A',
433
+ },
434
+ {
435
+ endsWith: 's',
436
+ },
437
+ ],
438
+ },
439
+ };
440
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
441
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
442
+ const expectedFilter = filterFactory.union(jaql.filter.or.map((c) => (0, condition_filter_util_js_1.createAttributeFilterFromConditionFilterJaql)(attribute, c, guid)), guid);
443
+ expect(filter.type).toEqual(expectedFilter.type);
444
+ expect(filter.id).toEqual(expectedFilter.id);
445
+ expect(filter.serializable()).toBeDefined();
446
+ });
447
+ it('should handle and', () => {
448
+ const jaql = {
449
+ table: 'Brand',
450
+ column: 'Brand',
451
+ datatype: 'text',
452
+ title: 'Brand',
453
+ dim: '[Brand.Brand]',
454
+ filter: {
455
+ and: [
456
+ {
457
+ startsWith: 'A',
458
+ },
459
+ {
460
+ endsWith: 's',
461
+ },
462
+ ],
463
+ },
464
+ };
465
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
466
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
467
+ const expectedFilter = filterFactory.intersection(jaql.filter.and.map((c) => (0, condition_filter_util_js_1.createAttributeFilterFromConditionFilterJaql)(attribute, c, guid)), guid);
468
+ expect(filter.type).toEqual(expectedFilter.type);
469
+ expect(filter.id).toEqual(expectedFilter.id);
470
+ expect(filter.serializable()).toBeDefined();
471
+ });
472
+ });
473
+ (0, vitest_1.describe)('MeasureFilter', () => {
474
+ it('should handle unary operation', () => {
475
+ [
476
+ {
477
+ operator: types_js_1.ConditionFilterType.GREATER_THAN,
478
+ factoryFunc: filterFactory.measureGreaterThan,
479
+ },
480
+ {
481
+ operator: types_js_1.ConditionFilterType.GREATER_THAN_OR_EQUAL,
482
+ factoryFunc: filterFactory.measureGreaterThanOrEqual,
483
+ },
484
+ { operator: types_js_1.ConditionFilterType.EQUALS, factoryFunc: filterFactory.measureEquals },
485
+ { operator: types_js_1.ConditionFilterType.LESS_THAN, factoryFunc: filterFactory.measureLessThan },
486
+ {
487
+ operator: types_js_1.ConditionFilterType.LESS_THAN_OR_EQUAL,
488
+ factoryFunc: filterFactory.measureLessThanOrEqual,
489
+ },
490
+ ].forEach((test) => {
491
+ const jaql = {
492
+ table: 'Commerce',
493
+ column: 'Revenue',
494
+ datatype: 'numeric',
495
+ title: 'sum Revenue',
496
+ dim: '[Commerce.Revenue]',
497
+ agg: 'sum',
498
+ filter: {
499
+ [test.operator]: 2000,
500
+ },
501
+ };
502
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
503
+ const measure = (0, attribute_measure_util_js_1.createMeasureFromFilterJaql)(jaql);
504
+ expect(measure).toBeDefined();
505
+ if (!measure)
506
+ return;
507
+ const expectedFilter = test.factoryFunc(measure, jaql.filter[test.operator], guid);
508
+ expectEqualFilters(filter, expectedFilter);
509
+ });
510
+ });
511
+ });
512
+ (0, vitest_1.describe)('ExcludeFilter', () => {
513
+ it('should handle exclude members', () => {
514
+ const jaql = {
515
+ table: 'Country',
516
+ column: 'Country',
517
+ datatype: 'text',
518
+ title: 'exclude Turkey from Country',
519
+ dim: '[Country.Country]',
520
+ filter: {
521
+ exclude: {
522
+ members: ['Turkey'],
523
+ },
524
+ },
525
+ };
526
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
527
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
528
+ const expectedFilter = filterFactory.exclude((0, filter_code_util_js_1.withComposeCode)(filterFactory.members)(attribute, jaql.filter.exclude.members, undefined, guid), undefined, guid);
529
+ expectEqualFilters(filter, expectedFilter);
530
+ });
531
+ });
532
+ (0, vitest_1.describe)('Advanced filter (pass-through JAQL)', () => {
533
+ test('should handle', () => {
534
+ const jaql = {
535
+ table: 'Commerce',
536
+ column: 'Revenue',
537
+ datatype: 'numeric',
538
+ title: 'sum Revenue',
539
+ filter: {
540
+ custom: true,
541
+ isAdvanced: true,
542
+ },
543
+ };
544
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
545
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
546
+ const expectedFilter = filterFactory.customFilter(attribute, jaql.filter, guid);
547
+ expect(filter.jaql()).toEqual(expectedFilter.jaql());
548
+ expect(filter.jaql(true)).toEqual(expectedFilter.jaql(true));
549
+ expect(filter.serializable()).toBeDefined();
550
+ expect(filter.toJSON()).toBeDefined();
551
+ });
552
+ });
553
+ (0, vitest_1.describe)('Generic filter (pass-through JAQL)', () => {
554
+ test('should fall back to generic filter (pass-through JAQL)', () => {
555
+ [
556
+ // SIMULATE INVALID FILTER TYPE
557
+ {
558
+ table: 'Commerce',
559
+ column: 'Revenue',
560
+ datatype: 'numeric',
561
+ title: 'sum Revenue',
562
+ filter: {
563
+ filterType: 'INVALID',
564
+ },
565
+ },
566
+ {
567
+ type: 'measure',
568
+ formula: 'QUARTILE([042C4-365], 2)',
569
+ context: {
570
+ '[042C4-365]': {
571
+ table: 'Commerce',
572
+ column: 'Revenue',
573
+ dim: '[Commerce.Revenue]',
574
+ datatype: 'numeric',
575
+ title: 'Revenue',
576
+ },
577
+ },
578
+ title: 'QUARTILE([Revenue], 2)',
579
+ datatype: 'numeric',
580
+ filter: {
581
+ fromNotEqual: '500',
582
+ },
583
+ },
584
+ {
585
+ table: 'Brand',
586
+ column: 'Brand',
587
+ dim: '[Brand.Brand]',
588
+ datatype: 'text',
589
+ merged: true,
590
+ title: 'Brand',
591
+ filter: {
592
+ top: 10,
593
+ by: {
594
+ type: 'measure',
595
+ formula: 'QUARTILE([042C4-365], 2)',
596
+ context: {
597
+ '[042C4-365]': {
598
+ table: 'Commerce',
599
+ column: 'Revenue',
600
+ dim: '[Commerce.Revenue]',
601
+ datatype: 'numeric',
602
+ title: 'Revenue',
603
+ },
604
+ },
605
+ title: 'QUARTILE([Revenue], 2)',
606
+ datatype: 'numeric',
607
+ },
608
+ rankingMessage: 'QUARTILE([Revenue], 2)',
609
+ },
610
+ },
611
+ ].forEach((item) => {
612
+ const jaql = item;
613
+ const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
614
+ const expectedFilter = (0, filter_from_jaql_util_js_2.createGenericFilter)(jaql, guid);
615
+ expect(filter.jaql()).toEqual(expectedFilter.jaql());
616
+ expect(filter.jaql(true)).toEqual(expectedFilter.jaql(true));
617
+ expect(filter.serializable()).toBeDefined();
618
+ expect(filter.toJSON()).toBeDefined();
619
+ });
620
+ });
621
+ });
622
+ });
623
+ });
@@ -0,0 +1,5 @@
1
+ import { FilterJaql } from '../../types.js';
2
+ declare type FilterMatcher = (value?: string | number) => boolean;
3
+ /** @internal */
4
+ export declare function createFilterMatcher(filterJaql: FilterJaql): FilterMatcher;
5
+ export {};