@infomaximum/widget-sdk 6.0.0-9 → 6.0.0-view-theme.1

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.
package/dist/index.esm.js CHANGED
@@ -132,35 +132,6 @@ function __rest(s, e) {
132
132
  return t;
133
133
  }
134
134
 
135
- function __values(o) {
136
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
137
- if (m) return m.call(o);
138
- if (o && typeof o.length === "number") return {
139
- next: function () {
140
- if (o && i >= o.length) o = void 0;
141
- return { value: o && o[i++], done: !o };
142
- }
143
- };
144
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
145
- }
146
-
147
- function __read(o, n) {
148
- var m = typeof Symbol === "function" && o[Symbol.iterator];
149
- if (!m) return o;
150
- var i = m.call(o), r, ar = [], e;
151
- try {
152
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
153
- }
154
- catch (error) { e = { error: error }; }
155
- finally {
156
- try {
157
- if (r && !r.done && (m = i["return"])) m.call(i);
158
- }
159
- finally { if (e) throw e.error; }
160
- }
161
- return ar;
162
- }
163
-
164
135
  function __makeTemplateObject(cooked, raw) {
165
136
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
166
137
  return cooked;
@@ -212,9 +183,18 @@ var EFormulaFilterFieldKeys;
212
183
  EFormulaFilterFieldKeys["lastTimeUnit"] = "lastTimeUnit";
213
184
  EFormulaFilterFieldKeys["durationUnit"] = "durationUnit";
214
185
  })(EFormulaFilterFieldKeys || (EFormulaFilterFieldKeys = {}));
186
+ var EDimensionProcessFilterTimeUnit;
187
+ (function (EDimensionProcessFilterTimeUnit) {
188
+ EDimensionProcessFilterTimeUnit["YEARS"] = "YEARS";
189
+ EDimensionProcessFilterTimeUnit["MONTHS"] = "MONTHS";
190
+ EDimensionProcessFilterTimeUnit["HOURS"] = "HOURS";
191
+ EDimensionProcessFilterTimeUnit["DAYS"] = "DAYS";
192
+ EDimensionProcessFilterTimeUnit["MINUTES"] = "MINUTES";
193
+ })(EDimensionProcessFilterTimeUnit || (EDimensionProcessFilterTimeUnit = {}));
215
194
  var isFormulaFilterValue = function (value) {
216
195
  return "filteringMethod" in value;
217
196
  };
197
+ var isDimensionProcessFilter = function (filter) { return "value" in filter && "condition" in filter; };
218
198
 
219
199
  var compact = function (items) { return ((items === null || items === void 0 ? void 0 : items.filter(Boolean)) || []); };
220
200
  var compactMap = function (items, f) {
@@ -639,7 +619,7 @@ var formattingConfig = {
639
619
  },
640
620
  };
641
621
 
642
- var _a$4;
622
+ var _a$5;
643
623
  var EDimensionTemplateNames;
644
624
  (function (EDimensionTemplateNames) {
645
625
  EDimensionTemplateNames["dateTime"] = "dateTime";
@@ -655,19 +635,19 @@ var EDimensionTemplateNames;
655
635
  EDimensionTemplateNames["hour"] = "hour";
656
636
  })(EDimensionTemplateNames || (EDimensionTemplateNames = {}));
657
637
  /** Стандартные шаблоны разреза */
658
- var dimensionTemplateFormulas = (_a$4 = {},
659
- _a$4[EDimensionTemplateNames.dateTime] = "toDateTime({columnFormula})",
660
- _a$4[EDimensionTemplateNames.date] = "toDate({columnFormula})",
661
- _a$4[EDimensionTemplateNames.year] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}))",
662
- _a$4[EDimensionTemplateNames.yearAndQuarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}) * 10 + toQuarter({columnFormula}))",
663
- _a$4[EDimensionTemplateNames.quarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toQuarter({columnFormula}))",
664
- _a$4[EDimensionTemplateNames.yearAndMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYYYYMM({columnFormula}))",
665
- _a$4[EDimensionTemplateNames.month] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toMonth({columnFormula}))",
666
- _a$4[EDimensionTemplateNames.dayOfMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfMonth({columnFormula}))",
667
- _a$4[EDimensionTemplateNames.week] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toWeek({columnFormula}))",
668
- _a$4[EDimensionTemplateNames.dayOfWeek] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfWeek({columnFormula}))",
669
- _a$4[EDimensionTemplateNames.hour] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toHour({columnFormula}))",
670
- _a$4);
638
+ var dimensionTemplateFormulas = (_a$5 = {},
639
+ _a$5[EDimensionTemplateNames.dateTime] = "toDateTime({columnFormula})",
640
+ _a$5[EDimensionTemplateNames.date] = "toDate({columnFormula})",
641
+ _a$5[EDimensionTemplateNames.year] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}))",
642
+ _a$5[EDimensionTemplateNames.yearAndQuarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}) * 10 + toQuarter({columnFormula}))",
643
+ _a$5[EDimensionTemplateNames.quarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toQuarter({columnFormula}))",
644
+ _a$5[EDimensionTemplateNames.yearAndMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYYYYMM({columnFormula}))",
645
+ _a$5[EDimensionTemplateNames.month] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toMonth({columnFormula}))",
646
+ _a$5[EDimensionTemplateNames.dayOfMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfMonth({columnFormula}))",
647
+ _a$5[EDimensionTemplateNames.week] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toWeek({columnFormula}))",
648
+ _a$5[EDimensionTemplateNames.dayOfWeek] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfWeek({columnFormula}))",
649
+ _a$5[EDimensionTemplateNames.hour] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toHour({columnFormula}))",
650
+ _a$5);
671
651
 
672
652
  var EWidgetIndicatorType;
673
653
  (function (EWidgetIndicatorType) {
@@ -777,14 +757,14 @@ var EEventAppearances;
777
757
  })(EEventAppearances || (EEventAppearances = {}));
778
758
 
779
759
  function createAggregationTemplate$1(functionName, options) {
780
- return "process(".concat(functionName, "(").concat((options === null || options === void 0 ? void 0 : options.distinct) ? "distinct " : "", "{columnFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})");
760
+ return "process(".concat(functionName, "(").concat((options === null || options === void 0 ? void 0 : options.distinct) ? "distinct " : "", "{columnFormula}, {eventNameFormula} ={eventName}{filters}), {caseCaseIdFormula})");
781
761
  }
782
762
 
783
- var countReworksTemplate = "process(if(countIf({eventNameFormula} = '{eventName}'{filters}) > 0, countIf({eventNameFormula} = '{eventName}'{filters}) - 1, 0), {caseCaseIdFormula})";
784
- var countExecutionsTemplate = "process(countIf({eventNameFormula} in '{eventName}'{filters}), {caseCaseIdFormula})";
785
- var lastValueTemplate = "process(argMaxIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})";
786
- var firstValueTemplate = "process(argMinIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})";
787
- var topTemplate = "process(topKIf(1)({columnFormula}, {eventNameFormula} = '{eventName}'{filters})[1], {caseCaseIdFormula})";
763
+ var countReworksTemplate = "process(if(countIf({eventNameFormula} = {eventName}{filters}) > 0, countIf({eventNameFormula} = {eventName}{filters}) - 1, 0), {caseCaseIdFormula})";
764
+ var countExecutionsTemplate = "process(countIf({eventNameFormula} in {eventName}{filters}), {caseCaseIdFormula})";
765
+ var lastValueTemplate = "process(argMaxIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})";
766
+ var firstValueTemplate = "process(argMinIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})";
767
+ var topTemplate = "process(topKIf(1)({columnFormula}, {eventNameFormula} = {eventName}{filters})[1], {caseCaseIdFormula})";
788
768
  var avgTemplate = createAggregationTemplate$1("avgIf");
789
769
  var medianTemplate = createAggregationTemplate$1("medianIf");
790
770
  var countTemplate = createAggregationTemplate$1("countIf");
@@ -793,6 +773,23 @@ var minTemplate = createAggregationTemplate$1("minIf");
793
773
  var maxTemplate = createAggregationTemplate$1("maxIf");
794
774
  var sumTemplate = createAggregationTemplate$1("sumIf");
795
775
 
776
+ function hasPossibleSingleLineComment(str) {
777
+ return str.indexOf("--") >= 0;
778
+ }
779
+ function sanitizeSingleLineComment(formula, wrapInBrackets) {
780
+ if (!hasPossibleSingleLineComment(formula)) {
781
+ return formula;
782
+ }
783
+ var lines = formula.split("\n");
784
+ var lastLine = lines[lines.length - 1];
785
+ // Кейс, когда хотим избежать повторного добавления переноса строки:
786
+ // уже есть переносы и после последнего переноса нет комментария
787
+ if (lines.length > 1 && lastLine && !hasPossibleSingleLineComment(lastLine)) {
788
+ return formula;
789
+ }
790
+ return wrapInBrackets ? "(".concat(formula, "\n)") : "".concat(formula, "\n");
791
+ }
792
+
796
793
  /** @deprecated - следует использовать fillTemplateSql */
797
794
  function fillTemplateString(templateString, params) {
798
795
  return templateString.replace(/\{(.*?)\}/g, function (_, key) {
@@ -800,31 +797,6 @@ function fillTemplateString(templateString, params) {
800
797
  return (_a = params[key]) !== null && _a !== void 0 ? _a : "";
801
798
  });
802
799
  }
803
- /** Функция для безопасного заполнения SQL шаблонов с защитой от однострочных SQL комментариев в подставляемых значениях. */
804
- function fillTemplateSql(templateString, params) {
805
- var e_1, _a;
806
- var newParams = {};
807
- try {
808
- for (var _b = __values(Object.entries(params)), _c = _b.next(); !_c.done; _c = _b.next()) {
809
- var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
810
- /** Эвристическая проверка на возможное присутствие sql-комментария в значении подставляемом в template
811
- */
812
- if (String(value).indexOf("--") >= 0) {
813
- newParams[key] = "".concat(value, "\n");
814
- continue;
815
- }
816
- newParams[key] = String(value);
817
- }
818
- }
819
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
820
- finally {
821
- try {
822
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
823
- }
824
- finally { if (e_1) throw e_1.error; }
825
- }
826
- return fillTemplateString(templateString, newParams);
827
- }
828
800
 
829
801
  /** Создать функцию экранирования переданных `specialChars` внутри `str` */
830
802
  var createEscaper = function (specialChars) { return function (str) {
@@ -897,7 +869,7 @@ var escapeSingularQuotes = function (formula) {
897
869
  };
898
870
 
899
871
  var prepareFormulaForSql = function (formula, simpleType) {
900
- formula = clearSingleLineComments(clearMultiLineComments(formula)).trim();
872
+ formula = sanitizeSingleLineComment(formula, true);
901
873
  return simpleType === ESimpleDataType.OTHER ? "toString(".concat(formula, ")") : formula;
902
874
  };
903
875
  var clearSingleLineComments = function (formula) {
@@ -979,7 +951,7 @@ var convertFiltersToFormula = function (filters) {
979
951
  return filters.length > 0 ? " AND ".concat(convertToFormulasChain(filters)) : "";
980
952
  };
981
953
 
982
- var _a$3;
954
+ var _a$4;
983
955
  var EDimensionAggregationTemplateName;
984
956
  (function (EDimensionAggregationTemplateName) {
985
957
  EDimensionAggregationTemplateName["avg"] = "avg";
@@ -996,20 +968,20 @@ var EDimensionAggregationTemplateName;
996
968
  EDimensionAggregationTemplateName["countReworks"] = "countReworks";
997
969
  })(EDimensionAggregationTemplateName || (EDimensionAggregationTemplateName = {}));
998
970
  /** Шаблоны процессных метрик разреза с режимом AGGREGATION */
999
- var dimensionAggregationTemplates = (_a$3 = {},
1000
- _a$3[EDimensionAggregationTemplateName.avg] = avgTemplate,
1001
- _a$3[EDimensionAggregationTemplateName.median] = medianTemplate,
1002
- _a$3[EDimensionAggregationTemplateName.count] = countTemplate,
1003
- _a$3[EDimensionAggregationTemplateName.countDistinct] = countDistinctTemplate,
1004
- _a$3[EDimensionAggregationTemplateName.min] = minTemplate,
1005
- _a$3[EDimensionAggregationTemplateName.max] = maxTemplate,
1006
- _a$3[EDimensionAggregationTemplateName.sum] = sumTemplate,
1007
- _a$3[EDimensionAggregationTemplateName.top] = topTemplate,
1008
- _a$3[EDimensionAggregationTemplateName.firstValue] = firstValueTemplate,
1009
- _a$3[EDimensionAggregationTemplateName.lastValue] = lastValueTemplate,
1010
- _a$3[EDimensionAggregationTemplateName.countExecutions] = countExecutionsTemplate,
1011
- _a$3[EDimensionAggregationTemplateName.countReworks] = countReworksTemplate,
1012
- _a$3);
971
+ var dimensionAggregationTemplates = (_a$4 = {},
972
+ _a$4[EDimensionAggregationTemplateName.avg] = avgTemplate,
973
+ _a$4[EDimensionAggregationTemplateName.median] = medianTemplate,
974
+ _a$4[EDimensionAggregationTemplateName.count] = countTemplate,
975
+ _a$4[EDimensionAggregationTemplateName.countDistinct] = countDistinctTemplate,
976
+ _a$4[EDimensionAggregationTemplateName.min] = minTemplate,
977
+ _a$4[EDimensionAggregationTemplateName.max] = maxTemplate,
978
+ _a$4[EDimensionAggregationTemplateName.sum] = sumTemplate,
979
+ _a$4[EDimensionAggregationTemplateName.top] = topTemplate,
980
+ _a$4[EDimensionAggregationTemplateName.firstValue] = firstValueTemplate,
981
+ _a$4[EDimensionAggregationTemplateName.lastValue] = lastValueTemplate,
982
+ _a$4[EDimensionAggregationTemplateName.countExecutions] = countExecutionsTemplate,
983
+ _a$4[EDimensionAggregationTemplateName.countReworks] = countReworksTemplate,
984
+ _a$4);
1013
985
  /** На основе значения режима AGGREGATION подготовить параметры для подстановки в шаблонную формулу */
1014
986
  var prepareDimensionAggregationParams = function (value) {
1015
987
  if (!value.eventName ||
@@ -1022,8 +994,7 @@ var prepareDimensionAggregationParams = function (value) {
1022
994
  var commonParams = {
1023
995
  eventNameFormula: value.eventNameFormula,
1024
996
  caseCaseIdFormula: value.caseCaseIdFormula,
1025
- eventName: value.eventName,
1026
- objectFilters: "1",
997
+ eventName: "'".concat(escapeSingularQuotes(value.eventName), "'"),
1027
998
  filters: convertFiltersToFormula(value.filters),
1028
999
  eventTimeFormula: "",
1029
1000
  columnFormula: "",
@@ -1052,13 +1023,13 @@ var timeTemplates = (function () {
1052
1023
  var generateTemplates = function (innerTemplate) {
1053
1024
  var templates = {};
1054
1025
  for (var key in dimensionTemplateFormulas) {
1055
- templates[key] = fillTemplateSql(dimensionTemplateFormulas[key], { columnFormula: innerTemplate });
1026
+ templates[key] = fillTemplateString(dimensionTemplateFormulas[key], { columnFormula: innerTemplate });
1056
1027
  }
1057
1028
  return templates;
1058
1029
  };
1059
1030
  return _a = {},
1060
- _a[EWidgetIndicatorValueModes.START_TIME] = generateTemplates("process(minIf({eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})"),
1061
- _a[EWidgetIndicatorValueModes.END_TIME] = generateTemplates("process(maxIf({eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})"),
1031
+ _a[EWidgetIndicatorValueModes.START_TIME] = generateTemplates("process(minIf({eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})"),
1032
+ _a[EWidgetIndicatorValueModes.END_TIME] = generateTemplates("process(maxIf({eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})"),
1062
1033
  _a;
1063
1034
  })();
1064
1035
  /** На основе значения режимов START_TIME/END_TIME подготовить параметры для подстановки в шаблонную формулу */
@@ -1076,12 +1047,12 @@ var prepareTimeParams = function (value) {
1076
1047
  eventNameFormula: value.eventNameFormula,
1077
1048
  caseCaseIdFormula: value.caseCaseIdFormula,
1078
1049
  filters: convertFiltersToFormula(value.filters),
1079
- eventName: value.eventName,
1050
+ eventName: "'".concat(escapeSingularQuotes(value.eventName), "'"),
1080
1051
  };
1081
1052
  };
1082
1053
 
1083
1054
  function getDimensionFormula(_a) {
1084
- var _b;
1055
+ var _b, _c;
1085
1056
  var value = _a.value;
1086
1057
  if (!value) {
1087
1058
  return "";
@@ -1095,10 +1066,13 @@ function getDimensionFormula(_a) {
1095
1066
  if (!templateFormula || !tableName || !columnName) {
1096
1067
  return "";
1097
1068
  }
1098
- return fillTemplateSql(templateFormula, {
1069
+ return fillTemplateString(templateFormula, {
1099
1070
  columnFormula: generateColumnFormula(tableName, columnName),
1100
1071
  });
1101
1072
  }
1073
+ return (_c = getProcessDimensionValueFormula(value)) !== null && _c !== void 0 ? _c : "";
1074
+ }
1075
+ function getProcessDimensionValueFormula(value) {
1102
1076
  if (value.mode === EWidgetIndicatorValueModes.AGGREGATION) {
1103
1077
  var preparedParams = prepareDimensionAggregationParams(value);
1104
1078
  if (!preparedParams) {
@@ -1108,10 +1082,10 @@ function getDimensionFormula(_a) {
1108
1082
  ? dimensionTemplateFormulas[value.innerTemplateName]
1109
1083
  : null;
1110
1084
  var columnFormula = innerTemplate
1111
- ? fillTemplateSql(innerTemplate, { columnFormula: preparedParams.columnFormula })
1085
+ ? fillTemplateString(innerTemplate, { columnFormula: preparedParams.columnFormula })
1112
1086
  : preparedParams.columnFormula;
1113
1087
  var dimensionAggregationTemplate = dimensionAggregationTemplates[value.templateName];
1114
- return fillTemplateSql(dimensionAggregationTemplate, __assign(__assign({}, preparedParams), { columnFormula: columnFormula }));
1088
+ return fillTemplateString(dimensionAggregationTemplate, __assign(__assign({}, preparedParams), { columnFormula: columnFormula }));
1115
1089
  }
1116
1090
  if (value.mode === EWidgetIndicatorValueModes.START_TIME ||
1117
1091
  value.mode === EWidgetIndicatorValueModes.END_TIME) {
@@ -1120,9 +1094,8 @@ function getDimensionFormula(_a) {
1120
1094
  return "";
1121
1095
  }
1122
1096
  var templateFormula = timeTemplates[value.mode][value.templateName];
1123
- return fillTemplateSql(templateFormula, preparedParams);
1097
+ return fillTemplateString(templateFormula, preparedParams);
1124
1098
  }
1125
- return "";
1126
1099
  }
1127
1100
 
1128
1101
  var EMeasureAggregationTemplateName;
@@ -1142,7 +1115,6 @@ var EMeasureAggregationTemplateName;
1142
1115
  })(EMeasureAggregationTemplateName || (EMeasureAggregationTemplateName = {}));
1143
1116
  /** На основе значения режима AGGREGATION подготовить параметры для подстановки в шаблонную формулу */
1144
1117
  var prepareMeasureAggregationParams = function (value) {
1145
- var _a;
1146
1118
  if ((!value.anyEvent && !value.eventName) ||
1147
1119
  !value.caseCaseIdFormula ||
1148
1120
  !value.eventNameFormula ||
@@ -1155,8 +1127,7 @@ var prepareMeasureAggregationParams = function (value) {
1155
1127
  outerAggregation: value.outerAggregation,
1156
1128
  eventNameFormula: value.eventNameFormula,
1157
1129
  caseCaseIdFormula: value.caseCaseIdFormula,
1158
- eventName: (_a = value.eventName) !== null && _a !== void 0 ? _a : "",
1159
- objectFilters: "1",
1130
+ eventName: value.eventName ? "'".concat(escapeSingularQuotes(value.eventName), "'") : "",
1160
1131
  filters: convertFiltersToFormula(value.filters),
1161
1132
  eventTimeFormula: "",
1162
1133
  columnFormula: "",
@@ -1177,7 +1148,7 @@ var prepareMeasureAggregationParams = function (value) {
1177
1148
  return columnParams;
1178
1149
  };
1179
1150
 
1180
- var _a$2;
1151
+ var _a$3;
1181
1152
  var EMeasureTemplateNames;
1182
1153
  (function (EMeasureTemplateNames) {
1183
1154
  EMeasureTemplateNames["avg"] = "avg";
@@ -1189,18 +1160,18 @@ var EMeasureTemplateNames;
1189
1160
  EMeasureTemplateNames["sum"] = "sum";
1190
1161
  })(EMeasureTemplateNames || (EMeasureTemplateNames = {}));
1191
1162
  /** Стандартные шаблоны меры */
1192
- var measureTemplateFormulas = (_a$2 = {},
1193
- _a$2[EMeasureTemplateNames.avg] = "avg({columnFormula})",
1194
- _a$2[EMeasureTemplateNames.count] = "count({columnFormula})",
1195
- _a$2[EMeasureTemplateNames.countDistinct] = "count(distinct {columnFormula})",
1196
- _a$2[EMeasureTemplateNames.median] = "medianExact({columnFormula})",
1197
- _a$2[EMeasureTemplateNames.min] = "min({columnFormula})",
1198
- _a$2[EMeasureTemplateNames.max] = "max({columnFormula})",
1199
- _a$2[EMeasureTemplateNames.sum] = "sum({columnFormula})",
1200
- _a$2);
1163
+ var measureTemplateFormulas = (_a$3 = {},
1164
+ _a$3[EMeasureTemplateNames.avg] = "avg({columnFormula})",
1165
+ _a$3[EMeasureTemplateNames.count] = "count({columnFormula})",
1166
+ _a$3[EMeasureTemplateNames.countDistinct] = "count(distinct {columnFormula})",
1167
+ _a$3[EMeasureTemplateNames.median] = "medianExact({columnFormula})",
1168
+ _a$3[EMeasureTemplateNames.min] = "min({columnFormula})",
1169
+ _a$3[EMeasureTemplateNames.max] = "max({columnFormula})",
1170
+ _a$3[EMeasureTemplateNames.sum] = "sum({columnFormula})",
1171
+ _a$3);
1201
1172
 
1202
1173
  /** Шаблон процессной метрики меры с режимом CONVERSION */
1203
- var conversionTemplate = "countIf(\n process(\n minIf(\n {startEventTimeFormula}, \n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) < \n process(\n maxIf(\n {endEventTimeFormula}, \n {endEventNameFormula} = '{endEventName}'{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) \n and \n process(\n countIf(\n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n) / countIf(\n process(\n countIf(\n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n)";
1174
+ var conversionTemplate = "countIf(\n process(\n minIf(\n {startEventTimeFormula}, \n {startEventNameFormula} = {startEventName}{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) < \n process(\n maxIf(\n {endEventTimeFormula}, \n {endEventNameFormula} = {endEventName}{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) \n and \n process(\n countIf(\n {startEventNameFormula} = {startEventName}{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n) / countIf(\n process(\n countIf(\n {startEventNameFormula} = {startEventName}{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n)";
1204
1175
  /** На основе значения режима CONVERSION подготовить параметры для подстановки в шаблонную формулу */
1205
1176
  var prepareConversionParams = function (value) {
1206
1177
  if (!value.startEventName ||
@@ -1215,15 +1186,14 @@ var prepareConversionParams = function (value) {
1215
1186
  return null;
1216
1187
  }
1217
1188
  return {
1218
- objectFilters: "1",
1219
1189
  startEventTimeFormula: value.startEventTimeFormula,
1220
1190
  startEventNameFormula: value.startEventNameFormula,
1221
1191
  startEventFilters: convertFiltersToFormula(value.startEventFilters),
1222
- startEventName: value.startEventName,
1192
+ startEventName: "'".concat(escapeSingularQuotes(value.startEventName), "'"),
1223
1193
  endEventTimeFormula: value.endEventTimeFormula,
1224
1194
  endCaseCaseIdFormula: value.endCaseCaseIdFormula,
1225
1195
  endEventNameFormula: value.endEventNameFormula,
1226
- endEventName: value.endEventName,
1196
+ endEventName: "'".concat(escapeSingularQuotes(value.endEventName), "'"),
1227
1197
  endEventFilters: convertFiltersToFormula(value.endEventFilters),
1228
1198
  };
1229
1199
  };
@@ -1231,7 +1201,7 @@ var prepareConversionParams = function (value) {
1231
1201
  /** Шаблоны процессных метрик меры с режимом DURATION */
1232
1202
  var durationTemplates = (function () {
1233
1203
  var _a;
1234
- var innerTemplate = "\n timeDiff(\n process(\n {startEventAggregationName}(\n {startEventTimeFormula}, \n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ), \n process(\n {endEventAggregationName}(\n {endEventTimeFormula}, \n {endEventNameFormula} = '{endEventName}'{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n )\n ), \n process(\n {startEventAggregationName}(\n {startEventTimeFormula}, \n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) < \n process(\n {endEventAggregationName}(\n {endEventTimeFormula}, \n {endEventNameFormula} = '{endEventName}'{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) \n and \n process(\n countIf(\n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n ";
1204
+ var innerTemplate = "\n timeDiff(\n process(\n {startEventAggregationName}(\n {startEventTimeFormula}, \n {startEventNameFormula} = {startEventName}{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ), \n process(\n {endEventAggregationName}(\n {endEventTimeFormula}, \n {endEventNameFormula} = {endEventName}{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n )\n ), \n process(\n {startEventAggregationName}(\n {startEventTimeFormula}, \n {startEventNameFormula} = {startEventName}{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) < \n process(\n {endEventAggregationName}(\n {endEventTimeFormula}, \n {endEventNameFormula} = {endEventName}{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) \n and \n process(\n countIf(\n {startEventNameFormula} = {startEventName}{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n ";
1235
1205
  return _a = {},
1236
1206
  _a[EDurationTemplateName.avg] = "avgIf(".concat(innerTemplate, ")"),
1237
1207
  _a[EDurationTemplateName.median] = "medianIf(".concat(innerTemplate, ")"),
@@ -1254,32 +1224,31 @@ var prepareDurationParams = function (value) {
1254
1224
  return appearance === EEventAppearances.FIRST ? "minIf" : "maxIf";
1255
1225
  };
1256
1226
  return {
1257
- objectFilters: "1",
1258
1227
  startEventTimeFormula: value.startEventTimeFormula,
1259
1228
  startEventNameFormula: value.startEventNameFormula,
1260
1229
  startEventFilters: convertFiltersToFormula(value.startEventFilters),
1261
- startEventName: value.startEventName,
1230
+ startEventName: "'".concat(escapeSingularQuotes(value.startEventName), "'"),
1262
1231
  startEventAggregationName: getAggregationNameByAppearances(value.startEventAppearances),
1263
1232
  endEventTimeFormula: value.endEventTimeFormula,
1264
1233
  endCaseCaseIdFormula: value.endCaseCaseIdFormula,
1265
1234
  endEventNameFormula: value.endEventNameFormula,
1266
- endEventName: value.endEventName,
1235
+ endEventName: "'".concat(escapeSingularQuotes(value.endEventName), "'"),
1267
1236
  endEventFilters: convertFiltersToFormula(value.endEventFilters),
1268
1237
  endEventAggregationName: getAggregationNameByAppearances(value.endEventAppearances),
1269
1238
  };
1270
1239
  };
1271
1240
 
1272
1241
  function createAnyEventTemplate(aggregatePart) {
1273
- return "{outerAggregation}If(process(".concat(aggregatePart, ", {caseCaseIdFormula}), {objectFilters})");
1242
+ return "{outerAggregation}(process(".concat(aggregatePart, ", {caseCaseIdFormula}))");
1274
1243
  }
1275
1244
  function createSpecificEventTemplate(fn, additionalFn) {
1276
- return "{outerAggregation}If(process(".concat(fn, "(").concat(additionalFn ? "".concat(additionalFn, " ") : "", "{columnFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula}), {objectFilters})");
1245
+ return "{outerAggregation}(process(".concat(fn, "(").concat(additionalFn ? "".concat(additionalFn, " ") : "", "{columnFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula}))");
1277
1246
  }
1278
1247
  function createTopLikeTemplate(template) {
1279
1248
  return function (outerAggregation) {
1280
1249
  return outerAggregation === EOuterAggregation.top
1281
- ? "{outerAggregation}KIf(1)(".concat(template, ", {objectFilters})[1]")
1282
- : "{outerAggregation}If(".concat(template, ", {objectFilters})");
1250
+ ? "{outerAggregation}K(1)(".concat(template, ")[1]")
1251
+ : "{outerAggregation}(".concat(template, ")");
1283
1252
  };
1284
1253
  }
1285
1254
  function createAggregationTemplate(templateName, _a) {
@@ -1326,9 +1295,9 @@ function createAggregationTemplate(templateName, _a) {
1326
1295
  ? createAnyEventTemplate("argMax({columnFormula}, {eventTimeFormula})")
1327
1296
  : createTopLikeTemplate(lastValueTemplate)(outerAggregation);
1328
1297
  case EMeasureAggregationTemplateName.countExecutions:
1329
- return "{outerAggregation}If(".concat(countExecutionsTemplate, ", {objectFilters})");
1298
+ return "{outerAggregation}(".concat(countExecutionsTemplate, ")");
1330
1299
  case EMeasureAggregationTemplateName.countReworks:
1331
- return "{outerAggregation}If(".concat(countReworksTemplate, ", {objectFilters})");
1300
+ return "{outerAggregation}(".concat(countReworksTemplate, ")");
1332
1301
  }
1333
1302
  }
1334
1303
 
@@ -1347,14 +1316,14 @@ function getMeasureFormula(_a) {
1347
1316
  if (!templateFormula || !tableName || !columnName) {
1348
1317
  return "";
1349
1318
  }
1350
- return fillTemplateSql(templateFormula, {
1319
+ return fillTemplateString(templateFormula, {
1351
1320
  columnFormula: generateColumnFormula(tableName, columnName),
1352
1321
  });
1353
1322
  }
1354
1323
  if (value.mode === EWidgetIndicatorValueModes.AGGREGATION) {
1355
1324
  var preparedParams = prepareMeasureAggregationParams(value);
1356
1325
  return preparedParams
1357
- ? fillTemplateSql(createAggregationTemplate(value.templateName, {
1326
+ ? fillTemplateString(createAggregationTemplate(value.templateName, {
1358
1327
  outerAggregation: preparedParams.outerAggregation,
1359
1328
  anyEvent: value.anyEvent,
1360
1329
  }), preparedParams)
@@ -1365,28 +1334,28 @@ function getMeasureFormula(_a) {
1365
1334
  if (!preparedParams) {
1366
1335
  return "";
1367
1336
  }
1368
- return fillTemplateSql(conversionTemplate, preparedParams);
1337
+ return fillTemplateString(conversionTemplate, preparedParams);
1369
1338
  }
1370
1339
  if (value.mode === EWidgetIndicatorValueModes.DURATION) {
1371
1340
  var preparedParams = prepareDurationParams(value);
1372
1341
  if (!preparedParams) {
1373
1342
  return "";
1374
1343
  }
1375
- return fillTemplateSql(durationTemplates[value.templateName], preparedParams);
1344
+ return fillTemplateString(durationTemplates[value.templateName], preparedParams);
1376
1345
  }
1377
1346
  return "";
1378
1347
  }
1379
1348
 
1380
- var _a$1;
1349
+ var _a$2;
1381
1350
  var EEventMeasureTemplateNames;
1382
1351
  (function (EEventMeasureTemplateNames) {
1383
1352
  EEventMeasureTemplateNames["eventsCount"] = "eventsCount";
1384
1353
  EEventMeasureTemplateNames["reworksCount"] = "reworksCount";
1385
1354
  })(EEventMeasureTemplateNames || (EEventMeasureTemplateNames = {}));
1386
- var eventMeasureTemplateFormulas = (_a$1 = {},
1387
- _a$1[EEventMeasureTemplateNames.eventsCount] = "count()",
1388
- _a$1[EEventMeasureTemplateNames.reworksCount] = "count() - uniqExact({caseCaseIdFormula})",
1389
- _a$1);
1355
+ var eventMeasureTemplateFormulas = (_a$2 = {},
1356
+ _a$2[EEventMeasureTemplateNames.eventsCount] = "count()",
1357
+ _a$2[EEventMeasureTemplateNames.reworksCount] = "count() - uniqExact({caseCaseIdFormula})",
1358
+ _a$2);
1390
1359
 
1391
1360
  function getEventMeasureFormula(_a, process) {
1392
1361
  var value = _a.value;
@@ -1398,21 +1367,21 @@ function getEventMeasureFormula(_a, process) {
1398
1367
  }
1399
1368
  if (value.mode === EWidgetIndicatorValueModes.TEMPLATE) {
1400
1369
  var templateFormula = eventMeasureTemplateFormulas[value.templateName];
1401
- return templateFormula && fillTemplateSql(templateFormula, process);
1370
+ return templateFormula && fillTemplateString(templateFormula, process);
1402
1371
  }
1403
1372
  return "";
1404
1373
  }
1405
1374
 
1406
- var _a;
1375
+ var _a$1;
1407
1376
  var ETransitionMeasureTemplateNames;
1408
1377
  (function (ETransitionMeasureTemplateNames) {
1409
1378
  ETransitionMeasureTemplateNames["transitionsCount"] = "transitionsCount";
1410
1379
  ETransitionMeasureTemplateNames["medianTime"] = "medianTime";
1411
1380
  })(ETransitionMeasureTemplateNames || (ETransitionMeasureTemplateNames = {}));
1412
- var transitionMeasureTemplateFormulas = (_a = {},
1413
- _a[ETransitionMeasureTemplateNames.transitionsCount] = "count()",
1414
- _a[ETransitionMeasureTemplateNames.medianTime] = "medianExact(date_diff(second, begin({eventTimeFormula}), end({eventTimeFormula})))",
1415
- _a);
1381
+ var transitionMeasureTemplateFormulas = (_a$1 = {},
1382
+ _a$1[ETransitionMeasureTemplateNames.transitionsCount] = "count()",
1383
+ _a$1[ETransitionMeasureTemplateNames.medianTime] = "medianExact(date_diff(second, begin({eventTimeFormula}), end({eventTimeFormula})))",
1384
+ _a$1);
1416
1385
 
1417
1386
  function getTransitionMeasureFormula(_a, process) {
1418
1387
  var value = _a.value;
@@ -1424,7 +1393,7 @@ function getTransitionMeasureFormula(_a, process) {
1424
1393
  }
1425
1394
  if (value.mode === EWidgetIndicatorValueModes.TEMPLATE) {
1426
1395
  var templateFormula = transitionMeasureTemplateFormulas[value.templateName];
1427
- return templateFormula && fillTemplateSql(templateFormula, process);
1396
+ return templateFormula && fillTemplateString(templateFormula, process);
1428
1397
  }
1429
1398
  return "";
1430
1399
  }
@@ -1616,7 +1585,7 @@ var mapFormulaFilterToCalculatorInput = function (filterValue) {
1616
1585
  if (!isFormulaFilterValue(filterValue)) {
1617
1586
  return {
1618
1587
  dbDataType: EClickHouseBaseTypes.Bool,
1619
- formula: fillTemplateSql(displayConditionTemplate, {
1588
+ formula: fillTemplateString(displayConditionTemplate, {
1620
1589
  formula: prepareFormulaForSql(filterValue.formula),
1621
1590
  }),
1622
1591
  values: ["true"],
@@ -1651,6 +1620,46 @@ var mapFormulaFiltersToInputs = function (filters) {
1651
1620
  return compactMap(filters, mapFormulaFilterToCalculatorInput);
1652
1621
  };
1653
1622
 
1623
+ var _a;
1624
+ var intervalByUnit = (_a = {},
1625
+ _a[EDimensionProcessFilterTimeUnit.YEARS] = "year",
1626
+ _a[EDimensionProcessFilterTimeUnit.MONTHS] = "month",
1627
+ _a[EDimensionProcessFilterTimeUnit.DAYS] = "day",
1628
+ _a[EDimensionProcessFilterTimeUnit.HOURS] = "hour",
1629
+ _a[EDimensionProcessFilterTimeUnit.MINUTES] = "minute",
1630
+ _a);
1631
+ function mapDimensionProcessFilterToCalculatorInput(filter) {
1632
+ var formula = filter.value.mode === EWidgetIndicatorValueModes.FORMULA
1633
+ ? filter.value.formula
1634
+ : getProcessDimensionValueFormula(filter.value);
1635
+ if (formula === undefined) {
1636
+ throw new Error("Formula generation error");
1637
+ }
1638
+ var _a = filter.condition, timeUnit = _a.timeUnit, filteringMethod = _a.filteringMethod, values = _a.values;
1639
+ if (filteringMethod === "LAST_TIME") {
1640
+ if (!timeUnit) {
1641
+ throw new Error("Missing time unit");
1642
+ }
1643
+ return {
1644
+ dbDataType: EClickHouseBaseTypes.Bool,
1645
+ formula: "date_diff('".concat(intervalByUnit[timeUnit], "', ").concat(formula, ", now())"),
1646
+ values: values,
1647
+ filteringMethod: formulaFilterMethods.LESS_THAN_OR_EQUAL_TO,
1648
+ };
1649
+ }
1650
+ return { formula: formula, filteringMethod: filteringMethod, values: values, dbDataType: filter.dbDataType };
1651
+ }
1652
+
1653
+ var mapSettingsFilterToCalculatorInput = function (filter) {
1654
+ if (isDimensionProcessFilter(filter)) {
1655
+ return mapDimensionProcessFilterToCalculatorInput(filter);
1656
+ }
1657
+ return mapFormulaFilterToCalculatorInput(filter);
1658
+ };
1659
+ var mapSettingsFiltersToInputs = function (filters) {
1660
+ return compactMap(filters, mapSettingsFilterToCalculatorInput);
1661
+ };
1662
+
1654
1663
  function mapMeasureToInput(measure, variables, addFormulas) {
1655
1664
  if (addFormulas === void 0) { addFormulas = function () { return new Map(); }; }
1656
1665
  var mainFormula = getMeasureFormula(measure);
@@ -2145,4 +2154,4 @@ var getColorByIndex = function (index) {
2145
2154
  return color;
2146
2155
  };
2147
2156
 
2148
- export { EActionButtonsTypes, EActionTypes, EActivateConditionMode, EAutoUpdateMode, ECalculatorFilterMethods, EClickHouseBaseTypes, EColorMode, EControlType, ECustomSelectTemplates, EDataModelOption, EDimensionAggregationTemplateName, EDimensionTemplateNames, EDisplayConditionMode, EDrawerPlacement, EDurationTemplateName, EDurationUnit, EEventAppearances, EEventMeasureTemplateNames, EFontWeight, EFormatOrFormattingMode, EFormatTypes, EFormattingPresets, EFormulaFilterFieldKeys, EIndicatorType, ELastTimeUnit, EMarkdownDisplayMode, EMeasureAggregationTemplateName, EMeasureTemplateNames, EOuterAggregation, EProcessFilterNames, ESelectOptionTypes, ESimpleDataType, ESimpleInputType, ESortDirection, ESortingValueModes, ESystemRecordKey, ETransitionMeasureTemplateNames, EUnitMode, EViewMode, EViewOpenIn, EWidgetActionInputMethod, EWidgetFilterMode, EWidgetIndicatorType, EWidgetIndicatorValueModes, OuterAggregation, applyIndexToArrayFormula, bindContentWithIndicator, bindContentsWithIndicators, checkDisplayCondition, clearMultiLineComments, clearSingleLineComments, colors, conversionTemplate, convertFiltersToFormula, convertToFormulasChain, countExecutionsTemplate, createEscaper, createAggregationTemplate as createMeasureAggregationTemplate, curlyBracketsContentPattern, dashboardLinkRegExp, dimensionAggregationTemplates, dimensionTemplateFormulas, displayConditionTemplate, doubleQuoteContentPattern, durationTemplates, escapeCurlyBracketLinkName, escapeDoubleQuoteLinkName, eventMeasureTemplateFormulas, fillTemplateSql, fillTemplateString, formattingConfig, formulaFilterMethods, generateColumnFormula, getColorByIndex, getDefaultSortOrders, getDimensionFormula, getDisplayConditionFormula, getEventMeasureFormula, getLocalizedText, getMeasureFormula, getRuleColor, getTransitionMeasureFormula, isDimensionsHierarchy, isFormulaFilterValue, isValidColor, mapDimensionsToInputs, mapEventMeasuresToInputs, mapFormulaFilterToCalculatorInput, mapFormulaFiltersToInputs, mapMeasuresToInputs, mapSortingToInputs, mapTransitionMeasuresToInputs, measureTemplateFormulas, parseClickHouseType, parseIndicatorLink, prepareConversionParams, prepareDimensionAggregationParams, prepareDurationParams, prepareFormulaForSql, prepareMeasureAggregationParams, prepareSortOrders, prepareTimeParams, prepareValuesForSql, replaceDisplayCondition, replaceFiltersBySelection, replaceHierarchiesWithDimensions, selectDimensionFromHierarchy, timeTemplates, transitionMeasureTemplateFormulas, unescapeSpecialCharacters, updateDefaultModeSelection, updateSingleModeSelection, workspaceLinkRegExp };
2157
+ export { EActionButtonsTypes, EActionTypes, EActivateConditionMode, EAutoUpdateMode, ECalculatorFilterMethods, EClickHouseBaseTypes, EColorMode, EControlType, ECustomSelectTemplates, EDataModelOption, EDimensionAggregationTemplateName, EDimensionProcessFilterTimeUnit, EDimensionTemplateNames, EDisplayConditionMode, EDrawerPlacement, EDurationTemplateName, EDurationUnit, EEventAppearances, EEventMeasureTemplateNames, EFontWeight, EFormatOrFormattingMode, EFormatTypes, EFormattingPresets, EFormulaFilterFieldKeys, EIndicatorType, ELastTimeUnit, EMarkdownDisplayMode, EMeasureAggregationTemplateName, EMeasureTemplateNames, EOuterAggregation, EProcessFilterNames, ESelectOptionTypes, ESimpleDataType, ESimpleInputType, ESortDirection, ESortingValueModes, ESystemRecordKey, ETransitionMeasureTemplateNames, EUnitMode, EViewMode, EViewOpenIn, EWidgetActionInputMethod, EWidgetFilterMode, EWidgetIndicatorType, EWidgetIndicatorValueModes, OuterAggregation, applyIndexToArrayFormula, bindContentWithIndicator, bindContentsWithIndicators, checkDisplayCondition, clearMultiLineComments, clearSingleLineComments, colors, conversionTemplate, convertFiltersToFormula, convertToFormulasChain, countExecutionsTemplate, createEscaper, createAggregationTemplate as createMeasureAggregationTemplate, curlyBracketsContentPattern, dashboardLinkRegExp, dimensionAggregationTemplates, dimensionTemplateFormulas, displayConditionTemplate, doubleQuoteContentPattern, durationTemplates, escapeCurlyBracketLinkName, escapeDoubleQuoteLinkName, eventMeasureTemplateFormulas, fillTemplateString, formattingConfig, formulaFilterMethods, generateColumnFormula, getColorByIndex, getDefaultSortOrders, getDimensionFormula, getDisplayConditionFormula, getEventMeasureFormula, getLocalizedText, getMeasureFormula, getProcessDimensionValueFormula, getRuleColor, getTransitionMeasureFormula, isDimensionProcessFilter, isDimensionsHierarchy, isFormulaFilterValue, isValidColor, mapDimensionsToInputs, mapEventMeasuresToInputs, mapFormulaFilterToCalculatorInput, mapFormulaFiltersToInputs, mapMeasuresToInputs, mapSettingsFiltersToInputs, mapSortingToInputs, mapTransitionMeasuresToInputs, measureTemplateFormulas, parseClickHouseType, parseIndicatorLink, prepareConversionParams, prepareDimensionAggregationParams, prepareDurationParams, prepareFormulaForSql, prepareMeasureAggregationParams, prepareSortOrders, prepareTimeParams, prepareValuesForSql, replaceDisplayCondition, replaceFiltersBySelection, replaceHierarchiesWithDimensions, selectDimensionFromHierarchy, timeTemplates, transitionMeasureTemplateFormulas, unescapeSpecialCharacters, updateDefaultModeSelection, updateSingleModeSelection, workspaceLinkRegExp };