@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,105 @@
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.createFilterFromJaql = exports.isDataSourceInfo = exports.getDataSourceName = exports.getFilterListAndRelations = exports.guidFast = void 0;
7
+ const cloneDeep_js_1 = __importDefault(require("lodash/cloneDeep.js"));
8
+ const filter_from_jaql_util_js_1 = require("./dimensional-model/filters/utils/filter-from-jaql-util.js");
9
+ /**
10
+ * A more performant, but slightly bulkier, RFC4122v4 implementation. Performance is improved by minimizing calls to random()
11
+ *
12
+ * @internal
13
+ */
14
+ const guidFast = function (len) {
15
+ if (!len) {
16
+ len = 20;
17
+ }
18
+ const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
19
+ const uuid = new Array(len);
20
+ let rnd = 0;
21
+ let r;
22
+ for (let i = 0; i < len; i += 1) {
23
+ if (i > 0 && i % 5 == 0) {
24
+ uuid[i] = '-';
25
+ continue;
26
+ }
27
+ if (rnd <= 0x02) {
28
+ rnd = (0x2000000 + Math.random() * 0x1000000) | 0;
29
+ }
30
+ r = rnd & 0xf;
31
+ rnd = rnd >> 4;
32
+ uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r];
33
+ }
34
+ return uuid.join('');
35
+ };
36
+ exports.guidFast = guidFast;
37
+ /**
38
+ * Function to separate list of filters from the provided relation and get logical relations for jaql
39
+ *
40
+ * @internal
41
+ */
42
+ const getFilterListAndRelations = (filterRelations) => {
43
+ if (!filterRelations) {
44
+ return { filters: undefined, relations: undefined };
45
+ }
46
+ if (Array.isArray(filterRelations)) {
47
+ return { filters: filterRelations, relations: undefined };
48
+ }
49
+ const filters = new Set();
50
+ function traverse(node) {
51
+ if (!node)
52
+ return node;
53
+ if ('guid' in node) {
54
+ filters.add(node);
55
+ return { instanceid: node.guid };
56
+ }
57
+ else {
58
+ if ('left' in node) {
59
+ node.left = traverse(node.left);
60
+ }
61
+ if ('right' in node) {
62
+ node.right = traverse(node.right);
63
+ }
64
+ return node;
65
+ }
66
+ }
67
+ // Create a deep copy of filterRelations to avoid mutation
68
+ const copiedFilterRelations = (0, cloneDeep_js_1.default)(filterRelations);
69
+ const relations = traverse(copiedFilterRelations);
70
+ return { filters: Array.from(filters), relations };
71
+ };
72
+ exports.getFilterListAndRelations = getFilterListAndRelations;
73
+ /**
74
+ * Gets the name of the data source
75
+ *
76
+ * @internal
77
+ */
78
+ function getDataSourceName(dataSource) {
79
+ return typeof dataSource === 'string' ? dataSource : dataSource.title;
80
+ }
81
+ exports.getDataSourceName = getDataSourceName;
82
+ /**
83
+ * Checks if the provided 'dataSource' is a data source info structure that contains more than just the data source name.
84
+ *
85
+ * @internal
86
+ */
87
+ function isDataSourceInfo(dataSource) {
88
+ return typeof dataSource === 'object' && 'type' in dataSource && 'title' in dataSource;
89
+ }
90
+ exports.isDataSourceInfo = isDataSourceInfo;
91
+ /**
92
+ * Creates a filter from a JAQL object.
93
+ *
94
+ * @param jaql - The filter JAQL object.
95
+ * @param instanceid - The instance ID.
96
+ * @returns - The created Filter object.
97
+ * @internal
98
+ */
99
+ const createFilterFromJaql = (jaql, instanceid) => {
100
+ // translation logic is based on FilterJaqlInternal type (from internal modern-analytics-filters)
101
+ // TODO reconcile FilterJaql and FilterJaqlInternal
102
+ const jaqlInternal = jaql;
103
+ return (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaqlInternal, instanceid);
104
+ };
105
+ exports.createFilterFromJaql = createFilterFromJaql;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,158 @@
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
+ const index_js_1 = require("./index.js");
27
+ const utils_js_1 = require("./utils.js");
28
+ const vitest_1 = require("vitest");
29
+ const filterFactory = __importStar(require("./dimensional-model/filters/factory.js"));
30
+ const attribute_measure_util_js_1 = require("./dimensional-model/filters/utils/attribute-measure-util.js");
31
+ const mockFilter1 = { guid: 'filter-1', name: 'Filter 1' };
32
+ const mockFilter2 = { guid: 'filter-2', name: 'Filter 2' };
33
+ const mockSimpleFilterRelations = {
34
+ operator: 'OR',
35
+ left: mockFilter1,
36
+ right: mockFilter2,
37
+ };
38
+ const mockNestedFilterRelations = {
39
+ operator: 'AND',
40
+ left: mockFilter1,
41
+ right: mockSimpleFilterRelations,
42
+ };
43
+ const simpleFilterRelationsResult = {
44
+ operator: 'OR',
45
+ left: { instanceid: mockFilter1.guid },
46
+ right: { instanceid: mockFilter2.guid },
47
+ };
48
+ const nestedFilterRelationsResult = {
49
+ operator: 'AND',
50
+ left: { instanceid: mockFilter1.guid },
51
+ right: simpleFilterRelationsResult,
52
+ };
53
+ (0, vitest_1.describe)('utils', () => {
54
+ (0, vitest_1.describe)('guidFast', () => {
55
+ test('should return a string of default length if length is not provided', () => {
56
+ const guid = (0, utils_js_1.guidFast)();
57
+ expect(typeof guid).toBe('string');
58
+ expect(guid.length).toBe(20);
59
+ });
60
+ test('should return a string of provided length', () => {
61
+ const guid = (0, utils_js_1.guidFast)(10);
62
+ expect(typeof guid).toBe('string');
63
+ expect(guid.length).toBe(10);
64
+ });
65
+ test('should return unique uids with no regard to timestamp', () => {
66
+ const guids = Array(2)
67
+ .fill(0)
68
+ .map(() => (0, utils_js_1.guidFast)(13));
69
+ const timestamps = Array(2)
70
+ .fill(0)
71
+ .map(() => Date.now());
72
+ expect(timestamps[0]).toBe(timestamps[1]);
73
+ expect(guids[0]).not.toBe(guids[1]);
74
+ });
75
+ });
76
+ (0, vitest_1.describe)('getFilterListAndRelations', () => {
77
+ test('should return undefined filters and undefined relations when input is undefined', () => {
78
+ const result = (0, utils_js_1.getFilterListAndRelations)(undefined);
79
+ expect(result.filters).toBeUndefined();
80
+ expect(result.relations).toBeUndefined();
81
+ });
82
+ test('should return filter list and undefined relations when input is an empty array', () => {
83
+ const result = (0, utils_js_1.getFilterListAndRelations)([]);
84
+ expect(result.filters).toEqual([]);
85
+ expect(result.relations).toBeUndefined();
86
+ });
87
+ test('should return filter list and undefined relations when input is an array of filters', () => {
88
+ const filterArray = [mockFilter1, mockFilter2];
89
+ const result = (0, utils_js_1.getFilterListAndRelations)(filterArray);
90
+ expect(result.filters).toEqual(filterArray);
91
+ expect(result.relations).toBeUndefined();
92
+ });
93
+ test('should return filter list and relations when input is a simple FilterRelations', () => {
94
+ const result = (0, utils_js_1.getFilterListAndRelations)(mockSimpleFilterRelations);
95
+ expect(result.filters).toEqual([mockFilter1, mockFilter2]);
96
+ expect(result.relations).toEqual(simpleFilterRelationsResult);
97
+ });
98
+ test('should return filter list and relations when input is a nested FilterRelations', () => {
99
+ const result = (0, utils_js_1.getFilterListAndRelations)(mockNestedFilterRelations);
100
+ expect(result.filters).toEqual([mockFilter1, mockFilter2]);
101
+ expect(result.relations).toEqual(nestedFilterRelationsResult);
102
+ });
103
+ });
104
+ (0, vitest_1.describe)('getDataSourceName', () => {
105
+ test('should return the name of the data source if it is DataSourceInfo', () => {
106
+ const dataSourceName = 'data-source-name';
107
+ const dataSource = {
108
+ type: 'elasticube',
109
+ title: dataSourceName,
110
+ };
111
+ const result = (0, utils_js_1.getDataSourceName)(dataSource);
112
+ expect(result).toBe(dataSourceName);
113
+ });
114
+ test('should return the data source itself if it is a string', () => {
115
+ const dataSourceName = 'data-source-name';
116
+ const result = (0, utils_js_1.getDataSourceName)(dataSourceName);
117
+ expect(result).toBe(dataSourceName);
118
+ });
119
+ });
120
+ (0, vitest_1.describe)('isDataSourceInfo', () => {
121
+ test('should return true if the provided dataSource is a DataSourceInfo', () => {
122
+ const dataSource = {
123
+ type: 'elasticube',
124
+ title: 'data-source-name',
125
+ };
126
+ const result = (0, utils_js_1.isDataSourceInfo)(dataSource);
127
+ expect(result).toBe(true);
128
+ });
129
+ test('should return false if the provided dataSource is a string', () => {
130
+ const dataSourceName = 'data-source-name';
131
+ const result = (0, utils_js_1.isDataSourceInfo)(dataSourceName);
132
+ expect(result).toBe(false);
133
+ });
134
+ });
135
+ (0, vitest_1.describe)('createFilterFromJaql', () => {
136
+ const instanceid = 'instanceid';
137
+ // just one simple test to cover the function.
138
+ // See more tests in src/dimensional-model/filters/utils/filter-jaql-util.test.ts
139
+ test('MembersFilter members()', () => {
140
+ const jaql = {
141
+ table: 'Category',
142
+ column: 'Category',
143
+ dim: '[Category.Category]',
144
+ datatype: 'text',
145
+ filter: {
146
+ explicit: true,
147
+ multiSelection: true,
148
+ members: ['Cell Phones', 'GPS Devices'],
149
+ },
150
+ title: 'Category',
151
+ };
152
+ const filter = (0, index_js_1.createFilterFromJaql)(jaql, instanceid);
153
+ const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
154
+ const expectedFilter = filterFactory.members(attribute, jaql.filter.members);
155
+ expect(filter.jaql().jaql).toEqual(expectedFilter.jaql().jaql);
156
+ });
157
+ });
158
+ });
@@ -96,8 +96,8 @@ export const boxWhiskerIqrOutliers = (target) => {
96
96
  Attr: target,
97
97
  });
98
98
  outliersAttrWithInnerFilter.name = `${outliersAttrWithInnerFilter.name} (Outliers)`;
99
- outliersAttrWithInnerFilter.jaql = () => {
100
- return Object.assign(Object.assign({}, target.jaql(true)), { filter: {
99
+ outliersAttrWithInnerFilter.jaql = (nested) => {
100
+ const jaql = Object.assign(Object.assign({}, target.jaql(true)), { filter: {
101
101
  or: [
102
102
  {
103
103
  fromNotEqual: outliersMax.jaql(true),
@@ -107,6 +107,7 @@ export const boxWhiskerIqrOutliers = (target) => {
107
107
  },
108
108
  ],
109
109
  } });
110
+ return nested ? jaql : { jaql };
110
111
  };
111
112
  return outliersAttrWithInnerFilter;
112
113
  };
@@ -124,8 +125,8 @@ export const boxWhiskerStdDevOutliers = (target) => {
124
125
  const outliersMin = customFormula(BOX_WHISKER.OUTLIER_MIN_VALUE_NAME, '(LOWERWHISKERMAX_STDEVP([Attr]), all([Attr]))', {
125
126
  Attr: target,
126
127
  });
127
- outliersAttrWithInnerFilter.jaql = () => {
128
- return Object.assign(Object.assign({}, target.jaql(true)), { filter: {
128
+ outliersAttrWithInnerFilter.jaql = (nested) => {
129
+ const jaql = Object.assign(Object.assign({}, target.jaql(true)), { filter: {
129
130
  or: [
130
131
  {
131
132
  fromNotEqual: outliersMax.jaql(true),
@@ -135,6 +136,7 @@ export const boxWhiskerStdDevOutliers = (target) => {
135
136
  },
136
137
  ],
137
138
  } });
139
+ return nested ? jaql : { jaql };
138
140
  };
139
141
  return outliersAttrWithInnerFilter;
140
142
  };