@sisense/sdk-data 1.22.0 → 1.23.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 (42) hide show
  1. package/dist/cjs/dimensional-model/filters/factory.d.ts +2 -1
  2. package/dist/cjs/dimensional-model/filters/factory.js +3 -2
  3. package/dist/cjs/dimensional-model/filters/filters.d.ts +3 -1
  4. package/dist/cjs/dimensional-model/filters/filters.js +3 -5
  5. package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.d.ts +1 -1
  6. package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.js +5 -4
  7. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.js +9 -6
  8. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +1 -1
  9. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +3 -3
  10. package/dist/cjs/dimensional-model/jaql-element.d.ts +36 -0
  11. package/dist/cjs/dimensional-model/jaql-element.js +73 -0
  12. package/dist/cjs/dimensional-model/types.d.ts +148 -0
  13. package/dist/cjs/dimensional-model/types.js +11 -2
  14. package/dist/cjs/index.d.ts +2 -0
  15. package/dist/cjs/index.js +4 -1
  16. package/dist/cjs/translation/resources/en.d.ts +14 -0
  17. package/dist/cjs/translation/resources/index.d.ts +6 -0
  18. package/dist/cjs/translation/resources/index.js +6 -0
  19. package/dist/cjs/utils.d.ts +11 -1
  20. package/dist/cjs/utils.js +28 -5
  21. package/dist/dimensional-model/filters/factory.d.ts +2 -1
  22. package/dist/dimensional-model/filters/factory.js +3 -2
  23. package/dist/dimensional-model/filters/filters.d.ts +3 -1
  24. package/dist/dimensional-model/filters/filters.js +3 -5
  25. package/dist/dimensional-model/filters/utils/attribute-measure-util.d.ts +1 -1
  26. package/dist/dimensional-model/filters/utils/attribute-measure-util.js +5 -4
  27. package/dist/dimensional-model/filters/utils/condition-filter-util.js +9 -6
  28. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +1 -1
  29. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +3 -3
  30. package/dist/dimensional-model/jaql-element.d.ts +36 -0
  31. package/dist/dimensional-model/jaql-element.js +68 -0
  32. package/dist/dimensional-model/types.d.ts +148 -0
  33. package/dist/dimensional-model/types.js +10 -1
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.js +2 -0
  36. package/dist/translation/resources/en.d.ts +14 -0
  37. package/dist/translation/resources/index.d.ts +6 -0
  38. package/dist/translation/resources/index.js +6 -0
  39. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -1
  40. package/dist/utils.d.ts +11 -1
  41. package/dist/utils.js +24 -2
  42. package/package.json +3 -3
package/dist/cjs/utils.js CHANGED
@@ -3,10 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getColumnNameFromAttribute = exports.getTableNameFromAttribute = exports.createFilterFromJaql = exports.convertSort = exports.convertJaqlDataSource = exports.convertDataSource = exports.isDataSourceInfo = exports.getDataSourceName = exports.getFilterListAndRelations = exports.guidFast = void 0;
6
+ exports.getSortType = exports.getColumnNameFromAttribute = exports.getTableNameFromAttribute = exports.createFilterFromJaql = exports.convertSort = exports.convertJaqlDataSource = exports.convertDataSource = exports.isDataSourceInfo = exports.getDataSourceName = exports.getFilterListAndRelations = exports.guidFast = void 0;
7
7
  const cloneDeep_js_1 = __importDefault(require("lodash-es/cloneDeep.js"));
8
- const index_js_1 = require("./index.js");
9
8
  const filter_from_jaql_util_js_1 = require("./dimensional-model/filters/utils/filter-from-jaql-util.js");
9
+ const types_js_1 = require("./dimensional-model/types.js");
10
10
  /**
11
11
  * A more performant, but slightly bulkier, RFC4122v4 implementation. Performance is improved by minimizing calls to random()
12
12
  *
@@ -127,10 +127,10 @@ exports.convertJaqlDataSource = convertJaqlDataSource;
127
127
  */
128
128
  function convertSort(sort) {
129
129
  if (sort) {
130
- return sort === 'asc' ? index_js_1.Sort.Ascending : index_js_1.Sort.Descending;
130
+ return sort === 'asc' ? types_js_1.Sort.Ascending : types_js_1.Sort.Descending;
131
131
  }
132
132
  else {
133
- return index_js_1.Sort.None;
133
+ return types_js_1.Sort.None;
134
134
  }
135
135
  }
136
136
  exports.convertSort = convertSort;
@@ -162,7 +162,12 @@ function parseExpression(expression) {
162
162
  const [table, column] = expression.slice(1, -1).split('.');
163
163
  return {
164
164
  table,
165
- column,
165
+ column: column
166
+ ? column
167
+ // in case of Date we have to remove the (Calendar) part
168
+ .replace('(Calendar)', '')
169
+ .trim()
170
+ : '',
166
171
  };
167
172
  }
168
173
  /**
@@ -183,3 +188,21 @@ function getColumnNameFromAttribute(attribute) {
183
188
  return parseExpression(attribute.expression).column;
184
189
  }
185
190
  exports.getColumnNameFromAttribute = getColumnNameFromAttribute;
191
+ /**
192
+ * Gets the sort type based on the jaql sort direction.
193
+ *
194
+ * @param jaqlSort - The jaql sort direction.
195
+ * @returns The sort direction.
196
+ * @internal
197
+ */
198
+ function getSortType(jaqlSort) {
199
+ switch (jaqlSort) {
200
+ case types_js_1.JaqlSortDirection.ASC:
201
+ return 'sortAsc';
202
+ case types_js_1.JaqlSortDirection.DESC:
203
+ return 'sortDesc';
204
+ default:
205
+ return 'sortNone';
206
+ }
207
+ }
208
+ exports.getSortType = getSortType;
@@ -377,10 +377,11 @@ export declare function numeric(attribute: Attribute, operatorA?: string, valueA
377
377
  * @param guid - Optional GUID for the filter
378
378
  * @param deactivatedMembers - Array of deactivated member values
379
379
  * @param backgroundFilter - Optional background filter
380
+ * @param multiSelection - Optional flag to disable multi-selection
380
381
  * @returns A filter instance
381
382
  * @shortDescription Creates filter on attribute to match certain string values
382
383
  */
383
- export declare function members(attribute: Attribute, members: string[], excludeMembers?: boolean, guid?: string, deactivatedMembers?: string[], backgroundFilter?: Filter): Filter;
384
+ export declare function members(attribute: Attribute, members: string[], excludeMembers?: boolean, guid?: string, deactivatedMembers?: string[], backgroundFilter?: Filter, multiSelection?: boolean): Filter;
384
385
  /**
385
386
  * Creates a filter to isolate date values starting from and including the given date and level.
386
387
  *
@@ -427,11 +427,12 @@ export function numeric(attribute, operatorA, valueA, operatorB, valueB, guid) {
427
427
  * @param guid - Optional GUID for the filter
428
428
  * @param deactivatedMembers - Array of deactivated member values
429
429
  * @param backgroundFilter - Optional background filter
430
+ * @param multiSelection - Optional flag to disable multi-selection
430
431
  * @returns A filter instance
431
432
  * @shortDescription Creates filter on attribute to match certain string values
432
433
  */
433
- export function members(attribute, members, excludeMembers, guid, deactivatedMembers, backgroundFilter) {
434
- return new MembersFilter(attribute, members, excludeMembers, guid, deactivatedMembers, backgroundFilter);
434
+ export function members(attribute, members, excludeMembers, guid, deactivatedMembers, backgroundFilter, multiSelection) {
435
+ return new MembersFilter(attribute, members, excludeMembers, guid, deactivatedMembers, backgroundFilter, multiSelection);
435
436
  }
436
437
  // DATE FILTERS
437
438
  /**
@@ -166,10 +166,12 @@ export declare class MembersFilter extends AbstractFilter {
166
166
  /** @internal */
167
167
  excludeMembers: boolean;
168
168
  /** @internal */
169
+ multiSelection: boolean;
170
+ /** @internal */
169
171
  deactivatedMembers: any[];
170
172
  /** @internal */
171
173
  backgroundFilter?: Filter;
172
- constructor(attribute: Attribute, members?: any[], excludeMembers?: boolean, guid?: string, deactivatedMembers?: any[], backgroundFilter?: Filter);
174
+ constructor(attribute: Attribute, members?: any[], excludeMembers?: boolean, guid?: string, deactivatedMembers?: any[], backgroundFilter?: Filter, multiSelection?: boolean);
173
175
  /**
174
176
  * gets the element's ID
175
177
  */
@@ -220,10 +220,11 @@ export class LogicalAttributeFilter extends AbstractFilter {
220
220
  * @internal
221
221
  */
222
222
  export class MembersFilter extends AbstractFilter {
223
- constructor(attribute, members, excludeMembers, guid, deactivatedMembers, backgroundFilter) {
223
+ constructor(attribute, members, excludeMembers, guid, deactivatedMembers, backgroundFilter, multiSelection = true) {
224
224
  super(attribute, FilterTypes.members, guid);
225
225
  this.members = members !== null && members !== void 0 ? members : [];
226
226
  this.excludeMembers = excludeMembers !== null && excludeMembers !== void 0 ? excludeMembers : false;
227
+ this.multiSelection = multiSelection;
227
228
  this.deactivatedMembers = deactivatedMembers !== null && deactivatedMembers !== void 0 ? deactivatedMembers : [];
228
229
  this.backgroundFilter = backgroundFilter;
229
230
  if (this.members.filter((m) => m === null || m === undefined).length > 0) {
@@ -256,10 +257,7 @@ export class MembersFilter extends AbstractFilter {
256
257
  const membersFilterJaql = {
257
258
  members: this.members.map((m) => m.toString()),
258
259
  };
259
- // if there's no members to exclude, do not add the exclude property
260
- const filterJaql = this.excludeMembers && this.members.length
261
- ? { exclude: membersFilterJaql }
262
- : membersFilterJaql;
260
+ const filterJaql = this.excludeMembers ? { exclude: membersFilterJaql } : membersFilterJaql;
263
261
  if (this.backgroundFilter) {
264
262
  return {
265
263
  and: [filterJaql, this.backgroundFilter.filterJaql()],
@@ -55,4 +55,4 @@ export declare const createMeasureFromFilterJaql: (jaql: FilterJaqlInternal) =>
55
55
  * @param jaql - Ranking filter Jaql object
56
56
  * @returns Measure
57
57
  */
58
- export declare const createMeasureFromRankingFilterJaql: (jaql: RankingFilterJaql | CustomFormulaJaql) => BaseMeasure | CalculatedMeasure;
58
+ export declare const createMeasureFromRankingFilterJaql: (jaql: RankingFilterJaql | CustomFormulaJaql, rankingMessage?: string) => BaseMeasure | CalculatedMeasure;
@@ -3,6 +3,7 @@ import { isNumber } from '../../simple-column-types.js';
3
3
  import { MetadataTypes } from '../../types.js';
4
4
  import * as measureFactory from '../../measures/factory.js';
5
5
  import { transformCustomFormulaJaql } from '../../measures/factory.js';
6
+ import { DimensionalBaseMeasure } from '../../measures/measures.js';
6
7
  const DATA_MODEL_MODULE_NAME = 'DM';
7
8
  /**
8
9
  * Creates an attribute or level attribute from the provided parameters
@@ -58,7 +59,7 @@ export const createAttributeFromFilterJaql = (jaql) => {
58
59
  */
59
60
  export const createMeasureHelper = (dim, table, column, level, dataType, agg, title, dataSource) => {
60
61
  const attribute = createAttributeHelper(dim, table, column, level, dataType, title, dataSource);
61
- const measure = measureFactory.aggregate(attribute, agg);
62
+ const measure = measureFactory.aggregate(attribute, agg, title);
62
63
  measure.composeCode = `measureFactory.${agg}(${attribute.composeCode})`;
63
64
  return measure;
64
65
  };
@@ -85,7 +86,7 @@ export const createMeasureFromFilterJaql = (jaql) => {
85
86
  const { dim, table, column, title, level, datatype: dataType, agg, datasource: dataSource, } = jaql;
86
87
  if (!agg)
87
88
  return undefined;
88
- return createMeasureHelper(dim, table, column, level, dataType, agg, title, dataSource);
89
+ return createMeasureHelper(dim, table, column, level, dataType, DimensionalBaseMeasure.aggregationFromJAQL(agg), title, dataSource);
89
90
  };
90
91
  /**
91
92
  * Creates a measure from the provided ranking filter JAQL object
@@ -93,9 +94,9 @@ export const createMeasureFromFilterJaql = (jaql) => {
93
94
  * @param jaql - Ranking filter Jaql object
94
95
  * @returns Measure
95
96
  */
96
- export const createMeasureFromRankingFilterJaql = (jaql) => {
97
+ export const createMeasureFromRankingFilterJaql = (jaql, rankingMessage) => {
97
98
  if ('formula' in jaql)
98
99
  return createCalculatedMeasureFromJaql(jaql);
99
100
  const { dim, table, column, level, datatype: dataType, agg } = jaql;
100
- return createMeasureHelper(dim, table, column, level, dataType, agg);
101
+ return createMeasureHelper(dim, table, column, level, dataType, DimensionalBaseMeasure.aggregationFromJAQL(agg), rankingMessage);
101
102
  };
@@ -82,12 +82,12 @@ export const getSelectedConditionOption = (filter) => {
82
82
  * @returns attribute filter
83
83
  */
84
84
  export const createAttributeFilterFromConditionFilterJaql = (attribute, conditionFilterJaql, guid) => {
85
- var _a, _b, _c, _d, _e;
85
+ var _a, _b, _c, _d, _e, _f;
86
86
  const conditionType = getSelectedConditionOption(conditionFilterJaql);
87
87
  switch (conditionType) {
88
88
  case ConditionFilterType.BOTTOM:
89
89
  if (conditionFilterJaql.by) {
90
- return withComposeCode(filterFactory.bottomRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by), conditionFilterJaql[ConditionFilterType.BOTTOM], guid);
90
+ return withComposeCode(filterFactory.bottomRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by, conditionFilterJaql.rankingMessage), conditionFilterJaql[ConditionFilterType.BOTTOM], guid);
91
91
  }
92
92
  break;
93
93
  case ConditionFilterType.EQUALS:
@@ -100,7 +100,7 @@ export const createAttributeFilterFromConditionFilterJaql = (attribute, conditio
100
100
  return withComposeCode(filterFactory.greaterThanOrEqual)(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL], guid);
101
101
  case ConditionFilterType.TOP:
102
102
  if (conditionFilterJaql.by) {
103
- return withComposeCode(filterFactory.topRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by), conditionFilterJaql[ConditionFilterType.TOP], guid);
103
+ return withComposeCode(filterFactory.topRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by, conditionFilterJaql.rankingMessage), conditionFilterJaql[ConditionFilterType.TOP], guid);
104
104
  }
105
105
  break;
106
106
  case ConditionFilterType.STARTS_WITH:
@@ -131,10 +131,13 @@ export const createAttributeFilterFromConditionFilterJaql = (attribute, conditio
131
131
  return withComposeCode(filterFactory.union)(conditionFilterJaql.or.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c, guid)), guid);
132
132
  }
133
133
  break;
134
- case ConditionFilterType.IS_NOT:
134
+ case ConditionFilterType.IS_NOT: {
135
+ const deactivatedMembers = (((_c = conditionFilterJaql.filter) === null || _c === void 0 ? void 0 : _c.turnedOff) && ((_d = conditionFilterJaql.filter.exclude) === null || _d === void 0 ? void 0 : _d.members)) ||
136
+ [];
137
+ const selectedMembers = ((_f = (_e = conditionFilterJaql.exclude) === null || _e === void 0 ? void 0 : _e.members) === null || _f === void 0 ? void 0 : _f.filter((member) => !deactivatedMembers.includes(member))) || [];
135
138
  // use members filter with exclude instead of exclude filter
136
- return withComposeCode(filterFactory.members)(attribute, ((_c = conditionFilterJaql.exclude) === null || _c === void 0 ? void 0 : _c.members) || [], true, guid, (((_d = conditionFilterJaql.filter) === null || _d === void 0 ? void 0 : _d.turnedOff) && ((_e = conditionFilterJaql.filter.exclude) === null || _e === void 0 ? void 0 : _e.members)) ||
137
- []);
139
+ return withComposeCode(filterFactory.members)(attribute, selectedMembers, true, guid, deactivatedMembers, undefined, conditionFilterJaql.multiSelection);
140
+ }
138
141
  case ConditionFilterType.AFTER:
139
142
  case ConditionFilterType.BEFORE:
140
143
  case ConditionFilterType.IS_EMPTY:
@@ -25,7 +25,7 @@ export declare const createFilterIncludeAll: (attribute: Attribute, guid?: strin
25
25
  * @param guid - Optional GUID for the filter
26
26
  * @returns Filter object
27
27
  */
28
- export declare const createFilterFromSpecificItemsFilterJaql: (attribute: Attribute, specificItemsFilterJaql: SpecificItemsFilterJaql, guid?: string) => Filter;
28
+ export declare const createFilterFromSpecificItemsFilterJaql: (attribute: Attribute, specificItemsFilterJaql: SpecificItemsFilterJaql, guid?: string, multiSelection?: boolean) => Filter;
29
29
  /**
30
30
  * Creates a filter from a date range filter JAQL object.
31
31
  *
@@ -57,11 +57,11 @@ export const createFilterIncludeAll = (attribute, guid) => {
57
57
  * @param guid - Optional GUID for the filter
58
58
  * @returns Filter object
59
59
  */
60
- export const createFilterFromSpecificItemsFilterJaql = (attribute, specificItemsFilterJaql, guid) => {
60
+ export const createFilterFromSpecificItemsFilterJaql = (attribute, specificItemsFilterJaql, guid, multiSelection) => {
61
61
  const deactivatedMembers = getDeactivatedMembersFromFilterJaql(specificItemsFilterJaql);
62
62
  const activeMembers = getActiveMembersFromFilterJaql(specificItemsFilterJaql, deactivatedMembers);
63
63
  return withComposeCode(filterFactory.members)(attribute, activeMembers, undefined, // use undefined instead of false to avoid including the property in composeCode
64
- guid, deactivatedMembers);
64
+ guid, deactivatedMembers, undefined, multiSelection);
65
65
  };
66
66
  function getDeactivatedMembersFromFilterJaql(filterJaql) {
67
67
  var _a, _b, _c;
@@ -163,7 +163,7 @@ export const createFilterFromJaqlInternal = (jaql, guid) => {
163
163
  case FILTER_TYPES.INCLUDE_ALL:
164
164
  return createFilterIncludeAll(attribute, guid);
165
165
  case FILTER_TYPES.SPECIFIC_ITEMS:
166
- return createFilterFromSpecificItemsFilterJaql(attribute, filterJaqlWithType, guid);
166
+ return createFilterFromSpecificItemsFilterJaql(attribute, filterJaqlWithType, guid, filterJaqlWithType.multiSelection);
167
167
  case FILTER_TYPES.CONDITION:
168
168
  return createFilterFromConditionFilterJaql(attribute, filterJaqlWithType, measure, guid);
169
169
  case FILTER_TYPES.DATE_RANGE:
@@ -0,0 +1,36 @@
1
+ import { DimensionalElement } from './base.js';
2
+ import { SortDirection } from './interfaces.js';
3
+ import { MetadataItem } from './types.js';
4
+ /**
5
+ * This implementation wraps metadata for a JAQL query. The metadata could be
6
+ * for a dimension, measure, or filter. We do little to no interpretation of
7
+ * the JAQL as it is designed to be "passed through" to the query execution
8
+ * step.
9
+ *
10
+ * This will typically be used for JAQL metadata that is coming from a Sisense
11
+ * instance and is assumed to be correct (e.g. dashboard widget, NLQ
12
+ * suggestion).
13
+ *
14
+ * @param item - the metadata item in a JAQL query
15
+ * @param type - the data type of the dimension
16
+ * @internal
17
+ */
18
+ export declare class JaqlElement extends DimensionalElement {
19
+ private readonly metadataItem;
20
+ expression: string;
21
+ skipValidation: boolean;
22
+ aggregation?: string;
23
+ formula?: string;
24
+ sortType?: SortDirection;
25
+ constructor(item: MetadataItem, type: string);
26
+ get id(): string;
27
+ jaql(): MetadataItem;
28
+ }
29
+ /**
30
+ * Create a JaqlElement from a MetadataItem
31
+ *
32
+ * @param item - the metadata item in a JAQL query
33
+ * @returns a JaqlElement
34
+ * @internal
35
+ */
36
+ export declare function createJaqlElement(item: MetadataItem): JaqlElement;
@@ -0,0 +1,68 @@
1
+ import { DimensionalElement } from './base.js';
2
+ import { getSortType } from '../utils.js';
3
+ import { MetadataTypes } from './types.js';
4
+ /**
5
+ * This implementation wraps metadata for a JAQL query. The metadata could be
6
+ * for a dimension, measure, or filter. We do little to no interpretation of
7
+ * the JAQL as it is designed to be "passed through" to the query execution
8
+ * step.
9
+ *
10
+ * This will typically be used for JAQL metadata that is coming from a Sisense
11
+ * instance and is assumed to be correct (e.g. dashboard widget, NLQ
12
+ * suggestion).
13
+ *
14
+ * @param item - the metadata item in a JAQL query
15
+ * @param type - the data type of the dimension
16
+ * @internal
17
+ */
18
+ export class JaqlElement extends DimensionalElement {
19
+ constructor(item, type) {
20
+ var _a;
21
+ super((_a = item.jaql.title) !== null && _a !== void 0 ? _a : '', type);
22
+ this.expression = (item.jaql.dim || item.jaql.formula);
23
+ this.metadataItem = item;
24
+ if (item.jaql.agg) {
25
+ this.aggregation = item.jaql.agg;
26
+ }
27
+ else {
28
+ delete this.aggregation;
29
+ }
30
+ if (item.jaql.formula) {
31
+ this.formula = item.jaql.formula;
32
+ }
33
+ else {
34
+ delete this.formula;
35
+ }
36
+ if (item.jaql.sort) {
37
+ this.sortType = getSortType(item.jaql.sort);
38
+ }
39
+ else {
40
+ delete this.sortType;
41
+ }
42
+ this.skipValidation = true;
43
+ }
44
+ get id() {
45
+ return this.expression;
46
+ }
47
+ jaql() {
48
+ return this.metadataItem;
49
+ }
50
+ }
51
+ const toMetadataType = {
52
+ text: MetadataTypes.TextAttribute,
53
+ numeric: MetadataTypes.NumericAttribute,
54
+ datetime: MetadataTypes.DateLevel,
55
+ };
56
+ /**
57
+ * Create a JaqlElement from a MetadataItem
58
+ *
59
+ * @param item - the metadata item in a JAQL query
60
+ * @returns a JaqlElement
61
+ * @internal
62
+ */
63
+ export function createJaqlElement(item) {
64
+ var _a;
65
+ // TODO: measures with a "formula" may not have a datatype. force this to be numeric because aggregations
66
+ // will always be of type number. check if there is a more correct way to do this
67
+ return new JaqlElement(item, (_a = toMetadataType[item.jaql.datatype]) !== null && _a !== void 0 ? _a : 'numeric');
68
+ }
@@ -223,12 +223,14 @@ export declare type IncludeAllFilter = {
223
223
  /** @internal */
224
224
  export declare type IncludeMembersFilter = {
225
225
  members: string[];
226
+ multiSelection?: boolean;
226
227
  };
227
228
  /** @internal */
228
229
  export declare type ExcludeMembersFilter = {
229
230
  exclude: {
230
231
  members: string[];
231
232
  };
233
+ multiSelection?: boolean;
232
234
  };
233
235
  /** @internal */
234
236
  export declare type TurnOffMembersFilter = ExcludeMembersFilter & {
@@ -266,3 +268,149 @@ export declare type OrFilter<FilterItem> = {
266
268
  * Abstract object with any unknown values
267
269
  */
268
270
  export declare type AnyObject = Record<string, any>;
271
+ /**
272
+ * @internal
273
+ */
274
+ interface DecimalAbbreviations {
275
+ k: boolean;
276
+ m: boolean;
277
+ b: boolean;
278
+ t: boolean;
279
+ }
280
+ /**
281
+ * @internal
282
+ */
283
+ export declare enum CurrencyPosition {
284
+ PRE = "pre",
285
+ POST = "post"
286
+ }
287
+ /**
288
+ * @internal
289
+ */
290
+ export declare type NumericMask = {
291
+ isdefault?: boolean;
292
+ abbreviations?: DecimalAbbreviations;
293
+ decimals?: 'auto' | number | string;
294
+ currency?: {
295
+ symbol: string;
296
+ position: CurrencyPosition;
297
+ };
298
+ percent?: boolean;
299
+ number?: {
300
+ separated: boolean;
301
+ };
302
+ separated?: boolean;
303
+ type?: string;
304
+ };
305
+ /**
306
+ * @internal
307
+ */
308
+ export declare type DatetimeMask = {
309
+ isdefault?: boolean;
310
+ years: string;
311
+ quarters: string;
312
+ months: string;
313
+ weeks: string;
314
+ minutes: string;
315
+ days: string;
316
+ type: string;
317
+ dateAndTime?: string;
318
+ };
319
+ /**
320
+ * @internal
321
+ */
322
+ export declare type MetadataItem = {
323
+ instanceid?: string;
324
+ measure?: MetadataItemJaql;
325
+ jaql: MetadataItemJaql;
326
+ panel?: string;
327
+ isScope?: boolean;
328
+ format?: {
329
+ mask?: Partial<DatetimeMask> | Partial<NumericMask>;
330
+ number?: string;
331
+ subtotal?: boolean;
332
+ width?: number;
333
+ databars?: boolean;
334
+ color?: {
335
+ type: string;
336
+ color?: string;
337
+ conditions?: Array<{
338
+ color: string;
339
+ operator: string;
340
+ expression: string | Record<string, any>;
341
+ }>;
342
+ };
343
+ };
344
+ field?: {
345
+ id?: string;
346
+ index?: number;
347
+ };
348
+ filter?: MetadataItem;
349
+ exclude?: MetadataItem;
350
+ by?: MetadataItemJaql;
351
+ level?: string;
352
+ anchor?: string;
353
+ from?: string;
354
+ to?: string;
355
+ };
356
+ /**
357
+ * @internal
358
+ */
359
+ export declare type MetadataItemJaql = {
360
+ dim?: string;
361
+ agg?: string;
362
+ datatype?: string;
363
+ table?: string;
364
+ column?: string;
365
+ level?: string;
366
+ dateTimeLevel?: string;
367
+ bucket?: string;
368
+ sort?: string;
369
+ in?: {
370
+ selected: {
371
+ jaql: MetadataItemJaql;
372
+ };
373
+ };
374
+ title?: string;
375
+ type?: string;
376
+ formula?: string;
377
+ context?: {
378
+ [itemId: string]: MetadataItemJaql;
379
+ };
380
+ filter?: MetadataItem;
381
+ sortDetails?: {
382
+ dir: string;
383
+ field?: number;
384
+ measurePath?: Record<number, string | number>;
385
+ sortingLastDimension?: boolean;
386
+ initialized?: boolean;
387
+ };
388
+ };
389
+ /**
390
+ * @internal
391
+ */
392
+ export declare type DataSourceField = {
393
+ column: string;
394
+ dimtype: string;
395
+ id: string;
396
+ indexed: boolean;
397
+ merged: boolean;
398
+ table: string;
399
+ title: string;
400
+ type: string;
401
+ };
402
+ /**
403
+ * @internal
404
+ */
405
+ export declare type DataSourceSchema = {
406
+ title: string;
407
+ type: 'extract' | 'live';
408
+ } & AnyObject;
409
+ /**
410
+ * @internal
411
+ */
412
+ export declare type DataSourceMetadata = {
413
+ title: string;
414
+ fullname: string;
415
+ live: boolean;
416
+ };
@@ -104,7 +104,8 @@ export const MetadataTypes = {
104
104
  const type = o;
105
105
  return type.toLowerCase() === MetadataTypes.BaseMeasure;
106
106
  }
107
- return (o.agg || o.aggregation) && o.attribute && !this.isMeasureTemplate(o);
107
+ // JaqlElement doesn't have property attribute. Check for jaql instead
108
+ return (o.agg || o.aggregation) && (o.attribute || o.jaql) && !this.isMeasureTemplate(o);
108
109
  },
109
110
  /**
110
111
  * Checks whether the given object or type is a measure - of any type
@@ -297,3 +298,11 @@ export var JaqlSortDirection;
297
298
  JaqlSortDirection["ASC"] = "asc";
298
299
  JaqlSortDirection["DESC"] = "desc";
299
300
  })(JaqlSortDirection = JaqlSortDirection || (JaqlSortDirection = {}));
301
+ /**
302
+ * @internal
303
+ */
304
+ export var CurrencyPosition;
305
+ (function (CurrencyPosition) {
306
+ CurrencyPosition["PRE"] = "pre";
307
+ CurrencyPosition["POST"] = "post";
308
+ })(CurrencyPosition = CurrencyPosition || (CurrencyPosition = {}));
package/dist/index.d.ts CHANGED
@@ -14,6 +14,7 @@ export * from './dimensional-model/data-model.js';
14
14
  export * from './dimensional-model/attributes.js';
15
15
  export * from './dimensional-model/dimensions.js';
16
16
  export * from './dimensional-model/factory.js';
17
+ export * from './dimensional-model/jaql-element.js';
17
18
  export * from './dimensional-model/filters/filters.js';
18
19
  export { createFilterMatcher } from './dimensional-model/filters/utils/filter-matcher-utils.js';
19
20
  /**
@@ -91,3 +92,4 @@ export * from './dimensional-model/simple-column-types.js';
91
92
  */
92
93
  export * as analyticsFactory from './dimensional-model/analytics/factory.js';
93
94
  export * from './utils.js';
95
+ export { type TranslationDictionary, PACKAGE_NAMESPACE as translationNamespace, } from './translation/resources/index.js';
package/dist/index.js CHANGED
@@ -14,6 +14,7 @@ export * from './dimensional-model/data-model.js';
14
14
  export * from './dimensional-model/attributes.js';
15
15
  export * from './dimensional-model/dimensions.js';
16
16
  export * from './dimensional-model/factory.js';
17
+ export * from './dimensional-model/jaql-element.js';
17
18
  export * from './dimensional-model/filters/filters.js';
18
19
  export { createFilterMatcher } from './dimensional-model/filters/utils/filter-matcher-utils.js';
19
20
  /**
@@ -91,3 +92,4 @@ export * from './dimensional-model/simple-column-types.js';
91
92
  */
92
93
  export * as analyticsFactory from './dimensional-model/analytics/factory.js';
93
94
  export * from './utils.js';
95
+ export { PACKAGE_NAMESPACE as translationNamespace, } from './translation/resources/index.js';
@@ -28,4 +28,18 @@ export declare const translation: {
28
28
  unsupportedDimensionalElement: string;
29
29
  };
30
30
  };
31
+ /**
32
+ * A reference type containing all currently used translation keys.
33
+ * This type serves as a complete resource for creating custom translations,
34
+ * ensuring that all required keys are present and included.
35
+ * It can also be used as Partial to make sure custom translation does not contain any typos.
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * import { TranslationDictionary } from '@sisense/sdk-data';
40
+ *
41
+ * const customTranslationResources: Partial<TranslationDictionary> = {
42
+ * ```
43
+ * @internal
44
+ */
31
45
  export declare type TranslationDictionary = typeof translation;
@@ -1,5 +1,11 @@
1
1
  import { TranslationDictionary } from './en.js';
2
2
  export type { TranslationDictionary };
3
+ /**
4
+ * A reference to the namespace of the translation resources.
5
+ * This namespace is used to access the translation resources in the i18next instance.
6
+ *
7
+ * @internal
8
+ */
3
9
  export declare const PACKAGE_NAMESPACE: "sdkData";
4
10
  export declare const resources: {
5
11
  en: {
@@ -1,5 +1,11 @@
1
1
  import { translation as enDictionary } from './en.js';
2
2
  import { translation as ukDictionary } from './uk.js';
3
+ /**
4
+ * A reference to the namespace of the translation resources.
5
+ * This namespace is used to access the translation resources in the i18next instance.
6
+ *
7
+ * @internal
8
+ */
3
9
  export const PACKAGE_NAMESPACE = 'sdkData';
4
10
  export const resources = {
5
11
  en: enDictionary,