@infomaximum/widget-sdk 6.0.0-wefi344-1 → 6.0.2

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.js CHANGED
@@ -36,12 +36,6 @@ exports.EViewOpenIn = void 0;
36
36
  EViewOpenIn["PLACEHOLDER"] = "PLACEHOLDER";
37
37
  EViewOpenIn["MODAL_WINDOW"] = "MODAL_WINDOW";
38
38
  EViewOpenIn["DRAWER_WINDOW"] = "DRAWER_WINDOW";
39
- // TODO: удалить при выполении BI-14979
40
- /** @deprecated необходимо использовать EViewOpenIn.WINDOW с флагом newWindow - true */
41
- EViewOpenIn["NEW_WINDOW"] = "NEW_WINDOW";
42
- // TODO: удалить при выполении BI-14979
43
- /** @deprecated необходимо использовать EViewOpenIn.WINDOW с флагом newWindow - false */
44
- EViewOpenIn["CURRENT_WINDOW"] = "CURRENT_WINDOW";
45
39
  })(exports.EViewOpenIn || (exports.EViewOpenIn = {}));
46
40
  exports.EDrawerPlacement = void 0;
47
41
  (function (EDrawerPlacement) {
@@ -139,6 +133,39 @@ function __rest(s, e) {
139
133
  return t;
140
134
  }
141
135
 
136
+ function __values(o) {
137
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
138
+ if (m) return m.call(o);
139
+ if (o && typeof o.length === "number") return {
140
+ next: function () {
141
+ if (o && i >= o.length) o = void 0;
142
+ return { value: o && o[i++], done: !o };
143
+ }
144
+ };
145
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
146
+ }
147
+
148
+ function __read(o, n) {
149
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
150
+ if (!m) return o;
151
+ var i = m.call(o), r, ar = [], e;
152
+ try {
153
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
154
+ }
155
+ catch (error) { e = { error: error }; }
156
+ finally {
157
+ try {
158
+ if (r && !r.done && (m = i["return"])) m.call(i);
159
+ }
160
+ finally { if (e) throw e.error; }
161
+ }
162
+ return ar;
163
+ }
164
+
165
+ function __makeTemplateObject(cooked, raw) {
166
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
167
+ return cooked;
168
+ }
142
169
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
143
170
  var e = new Error(message);
144
171
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -186,9 +213,18 @@ exports.EFormulaFilterFieldKeys = void 0;
186
213
  EFormulaFilterFieldKeys["lastTimeUnit"] = "lastTimeUnit";
187
214
  EFormulaFilterFieldKeys["durationUnit"] = "durationUnit";
188
215
  })(exports.EFormulaFilterFieldKeys || (exports.EFormulaFilterFieldKeys = {}));
216
+ exports.EDimensionProcessFilterTimeUnit = void 0;
217
+ (function (EDimensionProcessFilterTimeUnit) {
218
+ EDimensionProcessFilterTimeUnit["YEARS"] = "YEARS";
219
+ EDimensionProcessFilterTimeUnit["MONTHS"] = "MONTHS";
220
+ EDimensionProcessFilterTimeUnit["HOURS"] = "HOURS";
221
+ EDimensionProcessFilterTimeUnit["DAYS"] = "DAYS";
222
+ EDimensionProcessFilterTimeUnit["MINUTES"] = "MINUTES";
223
+ })(exports.EDimensionProcessFilterTimeUnit || (exports.EDimensionProcessFilterTimeUnit = {}));
189
224
  var isFormulaFilterValue = function (value) {
190
225
  return "filteringMethod" in value;
191
226
  };
227
+ var isDimensionProcessFilter = function (filter) { return "value" in filter && "condition" in filter; };
192
228
 
193
229
  var compact = function (items) { return ((items === null || items === void 0 ? void 0 : items.filter(Boolean)) || []); };
194
230
  var compactMap = function (items, f) {
@@ -613,7 +649,7 @@ var formattingConfig = {
613
649
  },
614
650
  };
615
651
 
616
- var _a$4;
652
+ var _a$5;
617
653
  exports.EDimensionTemplateNames = void 0;
618
654
  (function (EDimensionTemplateNames) {
619
655
  EDimensionTemplateNames["dateTime"] = "dateTime";
@@ -629,19 +665,19 @@ exports.EDimensionTemplateNames = void 0;
629
665
  EDimensionTemplateNames["hour"] = "hour";
630
666
  })(exports.EDimensionTemplateNames || (exports.EDimensionTemplateNames = {}));
631
667
  /** Стандартные шаблоны разреза */
632
- var dimensionTemplateFormulas = (_a$4 = {},
633
- _a$4[exports.EDimensionTemplateNames.dateTime] = "toDateTime({columnFormula})",
634
- _a$4[exports.EDimensionTemplateNames.date] = "toDate({columnFormula})",
635
- _a$4[exports.EDimensionTemplateNames.year] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}))",
636
- _a$4[exports.EDimensionTemplateNames.yearAndQuarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}) * 10 + toQuarter({columnFormula}))",
637
- _a$4[exports.EDimensionTemplateNames.quarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toQuarter({columnFormula}))",
638
- _a$4[exports.EDimensionTemplateNames.yearAndMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYYYYMM({columnFormula}))",
639
- _a$4[exports.EDimensionTemplateNames.month] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toMonth({columnFormula}))",
640
- _a$4[exports.EDimensionTemplateNames.dayOfMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfMonth({columnFormula}))",
641
- _a$4[exports.EDimensionTemplateNames.week] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toWeek({columnFormula}))",
642
- _a$4[exports.EDimensionTemplateNames.dayOfWeek] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfWeek({columnFormula}))",
643
- _a$4[exports.EDimensionTemplateNames.hour] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toHour({columnFormula}))",
644
- _a$4);
668
+ var dimensionTemplateFormulas = (_a$5 = {},
669
+ _a$5[exports.EDimensionTemplateNames.dateTime] = "toDateTime({columnFormula})",
670
+ _a$5[exports.EDimensionTemplateNames.date] = "toDate({columnFormula})",
671
+ _a$5[exports.EDimensionTemplateNames.year] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}))",
672
+ _a$5[exports.EDimensionTemplateNames.yearAndQuarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}) * 10 + toQuarter({columnFormula}))",
673
+ _a$5[exports.EDimensionTemplateNames.quarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toQuarter({columnFormula}))",
674
+ _a$5[exports.EDimensionTemplateNames.yearAndMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYYYYMM({columnFormula}))",
675
+ _a$5[exports.EDimensionTemplateNames.month] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toMonth({columnFormula}))",
676
+ _a$5[exports.EDimensionTemplateNames.dayOfMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfMonth({columnFormula}))",
677
+ _a$5[exports.EDimensionTemplateNames.week] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toWeek({columnFormula}))",
678
+ _a$5[exports.EDimensionTemplateNames.dayOfWeek] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfWeek({columnFormula}))",
679
+ _a$5[exports.EDimensionTemplateNames.hour] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toHour({columnFormula}))",
680
+ _a$5);
645
681
 
646
682
  exports.EWidgetIndicatorType = void 0;
647
683
  (function (EWidgetIndicatorType) {
@@ -683,6 +719,11 @@ exports.ESortingValueModes = void 0;
683
719
  /** Сортировка по показателю(разрезу или мере) виджета */
684
720
  ESortingValueModes["IN_WIDGET"] = "IN_WIDGET";
685
721
  })(exports.ESortingValueModes || (exports.ESortingValueModes = {}));
722
+ exports.EFormatOrFormattingMode = void 0;
723
+ (function (EFormatOrFormattingMode) {
724
+ EFormatOrFormattingMode["BASE"] = "BASE";
725
+ EFormatOrFormattingMode["TEMPLATE"] = "TEMPLATE";
726
+ })(exports.EFormatOrFormattingMode || (exports.EFormatOrFormattingMode = {}));
686
727
  /** Тип показателя */
687
728
  exports.EIndicatorType = void 0;
688
729
  (function (EIndicatorType) {
@@ -746,14 +787,14 @@ exports.EEventAppearances = void 0;
746
787
  })(exports.EEventAppearances || (exports.EEventAppearances = {}));
747
788
 
748
789
  function createAggregationTemplate$1(functionName, options) {
749
- return "process(".concat(functionName, "(").concat((options === null || options === void 0 ? void 0 : options.distinct) ? "distinct " : "", "{columnFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})");
790
+ return "process(".concat(functionName, "(").concat((options === null || options === void 0 ? void 0 : options.distinct) ? "distinct " : "", "{columnFormula}, {eventNameFormula} ={eventName}{filters}), {caseCaseIdFormula})");
750
791
  }
751
792
 
752
- var countReworksTemplate = "process(if(countIf({eventNameFormula} = '{eventName}'{filters}) > 0, countIf({eventNameFormula} = '{eventName}'{filters}) - 1, 0), {caseCaseIdFormula})";
753
- var countExecutionsTemplate = "process(countIf({eventNameFormula} in '{eventName}'{filters}), {caseCaseIdFormula})";
754
- var lastValueTemplate = "process(argMaxIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})";
755
- var firstValueTemplate = "process(argMinIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})";
756
- var topTemplate = "process(topKIf(1)({columnFormula}, {eventNameFormula} = '{eventName}'{filters})[1], {caseCaseIdFormula})";
793
+ var countReworksTemplate = "process(if(countIf({eventNameFormula} = {eventName}{filters}) > 0, countIf({eventNameFormula} = {eventName}{filters}) - 1, 0), {caseCaseIdFormula})";
794
+ var countExecutionsTemplate = "process(countIf({eventNameFormula} in {eventName}{filters}), {caseCaseIdFormula})";
795
+ var lastValueTemplate = "process(argMaxIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})";
796
+ var firstValueTemplate = "process(argMinIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})";
797
+ var topTemplate = "process(topKIf(1)({columnFormula}, {eventNameFormula} = {eventName}{filters})[1], {caseCaseIdFormula})";
757
798
  var avgTemplate = createAggregationTemplate$1("avgIf");
758
799
  var medianTemplate = createAggregationTemplate$1("medianIf");
759
800
  var countTemplate = createAggregationTemplate$1("countIf");
@@ -762,24 +803,118 @@ var minTemplate = createAggregationTemplate$1("minIf");
762
803
  var maxTemplate = createAggregationTemplate$1("maxIf");
763
804
  var sumTemplate = createAggregationTemplate$1("sumIf");
764
805
 
806
+ function hasPossibleSingleLineComment(str) {
807
+ return str.indexOf("--") >= 0;
808
+ }
809
+ function sanitizeSingleLineComment(formula, wrapInBrackets) {
810
+ if (!hasPossibleSingleLineComment(formula)) {
811
+ return formula;
812
+ }
813
+ var lines = formula.split("\n");
814
+ var lastLine = lines[lines.length - 1];
815
+ // Кейс, когда хотим избежать повторного добавления переноса строки:
816
+ // уже есть переносы и после последнего переноса нет комментария
817
+ if (lines.length > 1 && lastLine && !hasPossibleSingleLineComment(lastLine)) {
818
+ return formula;
819
+ }
820
+ return wrapInBrackets ? "(".concat(formula, "\n)") : "".concat(formula, "\n");
821
+ }
822
+
823
+ /** @deprecated - следует использовать fillTemplateSql */
765
824
  function fillTemplateString(templateString, params) {
766
- return templateString.replace(/\{(.*?)\}/g, function (_, key) { var _a; return (_a = params[key]) !== null && _a !== void 0 ? _a : ""; });
825
+ return templateString.replace(/\{(.*?)\}/g, function (_, key) {
826
+ var _a;
827
+ return (_a = params[key]) !== null && _a !== void 0 ? _a : "";
828
+ });
767
829
  }
830
+ /** Функция для безопасного заполнения SQL шаблонов с защитой от однострочных SQL комментариев в подставляемых значениях. */
831
+ function fillTemplateSql(templateString, params) {
832
+ var e_1, _a;
833
+ var newParams = {};
834
+ if (templateString.indexOf("'{") >= 0) {
835
+ throw new Error("\u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0448\u0430\u0431\u043B\u043E\u043D: \u043F\u043B\u0435\u0439\u0441\u0445\u043E\u043B\u0434\u0435\u0440\u044B \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u044B \u0437\u0430\u043A\u043B\u044E\u0447\u0430\u0442\u044C\u0441\u044F \u0432 \u043E\u0434\u0438\u043D\u0430\u0440\u043D\u044B\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438.\n \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 {placeholder} \u0432\u043C\u0435\u0441\u0442\u043E '{placeholder}'.\n \u041A\u0430\u0432\u044B\u0447\u043A\u0438 \u0434\u043E\u043B\u0436\u043D\u044B \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B\u0445 \u043F\u043E\u043B\u0435\u0439 \u043F\u0440\u0438 \u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432.");
836
+ }
837
+ try {
838
+ for (var _b = __values(Object.entries(params)), _c = _b.next(); !_c.done; _c = _b.next()) {
839
+ var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
840
+ if (String(value).indexOf("--") >= 0) {
841
+ newParams[key] = "".concat(value, "\n");
842
+ continue;
843
+ }
844
+ newParams[key] = sanitizeSingleLineComment(String(value));
845
+ }
846
+ }
847
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
848
+ finally {
849
+ try {
850
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
851
+ }
852
+ finally { if (e_1) throw e_1.error; }
853
+ }
854
+ return fillTemplateString(templateString, newParams);
855
+ }
856
+
857
+ /** Создать функцию экранирования переданных `specialChars` внутри `str` */
858
+ var createEscaper = function (specialChars) { return function (str) {
859
+ return specialChars.reduce(function (escaped, char) { return escaped.replaceAll(char, "\\".concat(char)); }, str);
860
+ }; };
768
861
 
769
- /** Функция для экранирования специальных символов
770
- * при подстановке названий таблиц, колонок, переменных или показателей в SQL-формулы.
771
- * Пример: Если название переменной содержит кавычки или обратные слеши,
772
- * например: `te"s\t`, то перед подстановкой в SQL-формулу его следует экранировать.
773
- * Результат должен выглядеть так: `"inputs"."te\"s\\t"`
862
+ /** Удалить из строки символы экранирования */
863
+ function unescapeSpecialCharacters(str) {
864
+ return str.replace(/\\(?!\\)/g, "").replace(/\\\\/g, "\\");
865
+ }
866
+
867
+ /**
868
+ * Создает RegExp-паттерн для подстроки с безопасными символами.
869
+ *
870
+ * Подстрока может содержать любой символ, кроме:
871
+ * 1. `restrictedChar` - запрещено появление без экранирования.
872
+ * 2. Обратного слэша (`\`) - запрещено появление без пары.
873
+ *
874
+ * Правило экранирования:
875
+ * - Любой символ, включая `restrictedChar` и `\`, можно использовать с префиксом `\`.
876
+ * - Последний символ в подстроке не может быть одинокий слэш.
877
+ *
878
+ * @param restrictedChar Символ, который нельзя использовать без экранирования.
879
+ * @returns Строка для вставки внутрь RegExp.
880
+ */
881
+ var createEscapableCharPattern = function (restrictedChar) {
882
+ return String.raw(templateObject_1 || (templateObject_1 = __makeTemplateObject(["(?:\\.|[^", "\\])*"], ["(?:\\\\.|[^", "\\\\])*"])), restrictedChar);
883
+ };
884
+ /**
885
+ * Паттерн подстроки, валидной для использования внутри фигурных скобок.
886
+ * Требование к подстроке - отсутствие закрывающих фигурных скобок (кроме экранированных).
774
887
  */
775
- var escapeSpecialCharacters = function (value) {
776
- return value.replaceAll("\\", "\\\\").replaceAll('"', '\\"');
888
+ var curlyBracketsContentPattern = createEscapableCharPattern("}");
889
+ /**
890
+ * Паттерн подстроки, валидной для использования внутри двойных кавычек.
891
+ * Требование к подстроке - отсутствие двойных кавычек (кроме экранированных).
892
+ */
893
+ var doubleQuoteContentPattern = createEscapableCharPattern('"');
894
+ var dashboardLinkRegExp = new RegExp(String.raw(templateObject_2 || (templateObject_2 = __makeTemplateObject(["#{(", ")}(?!.{(", ")})"], ["#\\{(", ")\\}(?!\\.\\{(", ")\\})"])), curlyBracketsContentPattern, curlyBracketsContentPattern), "g");
895
+ var workspaceLinkRegExp = new RegExp(String.raw(templateObject_3 || (templateObject_3 = __makeTemplateObject(["#{(", ")}.{(", ")}"], ["#\\{(", ")\\}\\.\\{(", ")\\}"])), curlyBracketsContentPattern, curlyBracketsContentPattern), "g");
896
+ /** Экранирование спец.символов при подстановке названий таблиц и колонок */
897
+ var escapeDoubleQuoteLinkName = createEscaper(Array.from("\\\""));
898
+ /** Экранирование спец.символов при подстановке названий переменных и показателей */
899
+ var escapeCurlyBracketLinkName = createEscaper(Array.from("\\}.[]"));
900
+ var parseIndicatorLink = function (formula) {
901
+ var dashboardMatch = formula.match(dashboardLinkRegExp.source);
902
+ if (dashboardMatch) {
903
+ return { scopeName: null, indicatorName: dashboardMatch[1] };
904
+ }
905
+ var workspaceMatch = formula.match(workspaceLinkRegExp.source);
906
+ if (workspaceMatch) {
907
+ return {
908
+ scopeName: unescapeSpecialCharacters(workspaceMatch[1]),
909
+ indicatorName: unescapeSpecialCharacters(workspaceMatch[2]),
910
+ };
911
+ }
912
+ return null;
777
913
  };
914
+ var templateObject_1, templateObject_2, templateObject_3;
778
915
 
779
916
  function generateColumnFormula(tableName, columnName) {
780
- var preparedTableName = escapeSpecialCharacters(tableName);
781
- var preparedColumnName = escapeSpecialCharacters(columnName);
782
- return "\"".concat(preparedTableName, "\".\"").concat(preparedColumnName, "\"");
917
+ return "\"".concat(escapeDoubleQuoteLinkName(tableName), "\".\"").concat(escapeDoubleQuoteLinkName(columnName), "\"");
783
918
  }
784
919
 
785
920
  var escapeSingularQuotes = function (formula) {
@@ -790,7 +925,7 @@ var escapeSingularQuotes = function (formula) {
790
925
  };
791
926
 
792
927
  var prepareFormulaForSql = function (formula, simpleType) {
793
- formula = clearSingleLineComments(clearMultiLineComments(formula)).trim();
928
+ formula = sanitizeSingleLineComment(formula, true);
794
929
  return simpleType === exports.ESimpleDataType.OTHER ? "toString(".concat(formula, ")") : formula;
795
930
  };
796
931
  var clearSingleLineComments = function (formula) {
@@ -872,7 +1007,7 @@ var convertFiltersToFormula = function (filters) {
872
1007
  return filters.length > 0 ? " AND ".concat(convertToFormulasChain(filters)) : "";
873
1008
  };
874
1009
 
875
- var _a$3;
1010
+ var _a$4;
876
1011
  exports.EDimensionAggregationTemplateName = void 0;
877
1012
  (function (EDimensionAggregationTemplateName) {
878
1013
  EDimensionAggregationTemplateName["avg"] = "avg";
@@ -889,20 +1024,20 @@ exports.EDimensionAggregationTemplateName = void 0;
889
1024
  EDimensionAggregationTemplateName["countReworks"] = "countReworks";
890
1025
  })(exports.EDimensionAggregationTemplateName || (exports.EDimensionAggregationTemplateName = {}));
891
1026
  /** Шаблоны процессных метрик разреза с режимом AGGREGATION */
892
- var dimensionAggregationTemplates = (_a$3 = {},
893
- _a$3[exports.EDimensionAggregationTemplateName.avg] = avgTemplate,
894
- _a$3[exports.EDimensionAggregationTemplateName.median] = medianTemplate,
895
- _a$3[exports.EDimensionAggregationTemplateName.count] = countTemplate,
896
- _a$3[exports.EDimensionAggregationTemplateName.countDistinct] = countDistinctTemplate,
897
- _a$3[exports.EDimensionAggregationTemplateName.min] = minTemplate,
898
- _a$3[exports.EDimensionAggregationTemplateName.max] = maxTemplate,
899
- _a$3[exports.EDimensionAggregationTemplateName.sum] = sumTemplate,
900
- _a$3[exports.EDimensionAggregationTemplateName.top] = topTemplate,
901
- _a$3[exports.EDimensionAggregationTemplateName.firstValue] = firstValueTemplate,
902
- _a$3[exports.EDimensionAggregationTemplateName.lastValue] = lastValueTemplate,
903
- _a$3[exports.EDimensionAggregationTemplateName.countExecutions] = countExecutionsTemplate,
904
- _a$3[exports.EDimensionAggregationTemplateName.countReworks] = countReworksTemplate,
905
- _a$3);
1027
+ var dimensionAggregationTemplates = (_a$4 = {},
1028
+ _a$4[exports.EDimensionAggregationTemplateName.avg] = avgTemplate,
1029
+ _a$4[exports.EDimensionAggregationTemplateName.median] = medianTemplate,
1030
+ _a$4[exports.EDimensionAggregationTemplateName.count] = countTemplate,
1031
+ _a$4[exports.EDimensionAggregationTemplateName.countDistinct] = countDistinctTemplate,
1032
+ _a$4[exports.EDimensionAggregationTemplateName.min] = minTemplate,
1033
+ _a$4[exports.EDimensionAggregationTemplateName.max] = maxTemplate,
1034
+ _a$4[exports.EDimensionAggregationTemplateName.sum] = sumTemplate,
1035
+ _a$4[exports.EDimensionAggregationTemplateName.top] = topTemplate,
1036
+ _a$4[exports.EDimensionAggregationTemplateName.firstValue] = firstValueTemplate,
1037
+ _a$4[exports.EDimensionAggregationTemplateName.lastValue] = lastValueTemplate,
1038
+ _a$4[exports.EDimensionAggregationTemplateName.countExecutions] = countExecutionsTemplate,
1039
+ _a$4[exports.EDimensionAggregationTemplateName.countReworks] = countReworksTemplate,
1040
+ _a$4);
906
1041
  /** На основе значения режима AGGREGATION подготовить параметры для подстановки в шаблонную формулу */
907
1042
  var prepareDimensionAggregationParams = function (value) {
908
1043
  if (!value.eventName ||
@@ -915,8 +1050,7 @@ var prepareDimensionAggregationParams = function (value) {
915
1050
  var commonParams = {
916
1051
  eventNameFormula: value.eventNameFormula,
917
1052
  caseCaseIdFormula: value.caseCaseIdFormula,
918
- eventName: value.eventName,
919
- objectFilters: "1",
1053
+ eventName: "'".concat(escapeSingularQuotes(value.eventName), "'"),
920
1054
  filters: convertFiltersToFormula(value.filters),
921
1055
  eventTimeFormula: "",
922
1056
  columnFormula: "",
@@ -945,13 +1079,13 @@ var timeTemplates = (function () {
945
1079
  var generateTemplates = function (innerTemplate) {
946
1080
  var templates = {};
947
1081
  for (var key in dimensionTemplateFormulas) {
948
- templates[key] = fillTemplateString(dimensionTemplateFormulas[key], { columnFormula: innerTemplate });
1082
+ templates[key] = fillTemplateSql(dimensionTemplateFormulas[key], { columnFormula: innerTemplate });
949
1083
  }
950
1084
  return templates;
951
1085
  };
952
1086
  return _a = {},
953
- _a[exports.EWidgetIndicatorValueModes.START_TIME] = generateTemplates("process(minIf({eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})"),
954
- _a[exports.EWidgetIndicatorValueModes.END_TIME] = generateTemplates("process(maxIf({eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})"),
1087
+ _a[exports.EWidgetIndicatorValueModes.START_TIME] = generateTemplates("process(minIf({eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})"),
1088
+ _a[exports.EWidgetIndicatorValueModes.END_TIME] = generateTemplates("process(maxIf({eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})"),
955
1089
  _a;
956
1090
  })();
957
1091
  /** На основе значения режимов START_TIME/END_TIME подготовить параметры для подстановки в шаблонную формулу */
@@ -969,12 +1103,12 @@ var prepareTimeParams = function (value) {
969
1103
  eventNameFormula: value.eventNameFormula,
970
1104
  caseCaseIdFormula: value.caseCaseIdFormula,
971
1105
  filters: convertFiltersToFormula(value.filters),
972
- eventName: value.eventName,
1106
+ eventName: "'".concat(escapeSingularQuotes(value.eventName), "'"),
973
1107
  };
974
1108
  };
975
1109
 
976
1110
  function getDimensionFormula(_a) {
977
- var _b;
1111
+ var _b, _c;
978
1112
  var value = _a.value;
979
1113
  if (!value) {
980
1114
  return "";
@@ -988,10 +1122,13 @@ function getDimensionFormula(_a) {
988
1122
  if (!templateFormula || !tableName || !columnName) {
989
1123
  return "";
990
1124
  }
991
- return fillTemplateString(templateFormula, {
1125
+ return fillTemplateSql(templateFormula, {
992
1126
  columnFormula: generateColumnFormula(tableName, columnName),
993
1127
  });
994
1128
  }
1129
+ return (_c = getProcessDimensionValueFormula(value)) !== null && _c !== void 0 ? _c : "";
1130
+ }
1131
+ function getProcessDimensionValueFormula(value) {
995
1132
  if (value.mode === exports.EWidgetIndicatorValueModes.AGGREGATION) {
996
1133
  var preparedParams = prepareDimensionAggregationParams(value);
997
1134
  if (!preparedParams) {
@@ -1001,10 +1138,10 @@ function getDimensionFormula(_a) {
1001
1138
  ? dimensionTemplateFormulas[value.innerTemplateName]
1002
1139
  : null;
1003
1140
  var columnFormula = innerTemplate
1004
- ? fillTemplateString(innerTemplate, { columnFormula: preparedParams.columnFormula })
1141
+ ? fillTemplateSql(innerTemplate, { columnFormula: preparedParams.columnFormula })
1005
1142
  : preparedParams.columnFormula;
1006
1143
  var dimensionAggregationTemplate = dimensionAggregationTemplates[value.templateName];
1007
- return fillTemplateString(dimensionAggregationTemplate, __assign(__assign({}, preparedParams), { columnFormula: columnFormula }));
1144
+ return fillTemplateSql(dimensionAggregationTemplate, __assign(__assign({}, preparedParams), { columnFormula: columnFormula }));
1008
1145
  }
1009
1146
  if (value.mode === exports.EWidgetIndicatorValueModes.START_TIME ||
1010
1147
  value.mode === exports.EWidgetIndicatorValueModes.END_TIME) {
@@ -1013,9 +1150,8 @@ function getDimensionFormula(_a) {
1013
1150
  return "";
1014
1151
  }
1015
1152
  var templateFormula = timeTemplates[value.mode][value.templateName];
1016
- return fillTemplateString(templateFormula, preparedParams);
1153
+ return fillTemplateSql(templateFormula, preparedParams);
1017
1154
  }
1018
- return "";
1019
1155
  }
1020
1156
 
1021
1157
  exports.EMeasureAggregationTemplateName = void 0;
@@ -1047,8 +1183,7 @@ var prepareMeasureAggregationParams = function (value) {
1047
1183
  outerAggregation: value.outerAggregation,
1048
1184
  eventNameFormula: value.eventNameFormula,
1049
1185
  caseCaseIdFormula: value.caseCaseIdFormula,
1050
- eventName: value.eventName,
1051
- objectFilters: "1",
1186
+ eventName: value.eventName ? "'".concat(escapeSingularQuotes(value.eventName), "'") : "",
1052
1187
  filters: convertFiltersToFormula(value.filters),
1053
1188
  eventTimeFormula: "",
1054
1189
  columnFormula: "",
@@ -1069,7 +1204,7 @@ var prepareMeasureAggregationParams = function (value) {
1069
1204
  return columnParams;
1070
1205
  };
1071
1206
 
1072
- var _a$2;
1207
+ var _a$3, _b;
1073
1208
  exports.EMeasureTemplateNames = void 0;
1074
1209
  (function (EMeasureTemplateNames) {
1075
1210
  EMeasureTemplateNames["avg"] = "avg";
@@ -1080,19 +1215,28 @@ exports.EMeasureTemplateNames = void 0;
1080
1215
  EMeasureTemplateNames["max"] = "max";
1081
1216
  EMeasureTemplateNames["sum"] = "sum";
1082
1217
  })(exports.EMeasureTemplateNames || (exports.EMeasureTemplateNames = {}));
1218
+ exports.EMeasureInnerTemplateNames = void 0;
1219
+ (function (EMeasureInnerTemplateNames) {
1220
+ EMeasureInnerTemplateNames["begin"] = "begin";
1221
+ EMeasureInnerTemplateNames["end"] = "end";
1222
+ })(exports.EMeasureInnerTemplateNames || (exports.EMeasureInnerTemplateNames = {}));
1083
1223
  /** Стандартные шаблоны меры */
1084
- var measureTemplateFormulas = (_a$2 = {},
1085
- _a$2[exports.EMeasureTemplateNames.avg] = "avg({columnFormula})",
1086
- _a$2[exports.EMeasureTemplateNames.count] = "count({columnFormula})",
1087
- _a$2[exports.EMeasureTemplateNames.countDistinct] = "count(distinct {columnFormula})",
1088
- _a$2[exports.EMeasureTemplateNames.median] = "medianExact({columnFormula})",
1089
- _a$2[exports.EMeasureTemplateNames.min] = "min({columnFormula})",
1090
- _a$2[exports.EMeasureTemplateNames.max] = "max({columnFormula})",
1091
- _a$2[exports.EMeasureTemplateNames.sum] = "sum({columnFormula})",
1092
- _a$2);
1224
+ var measureTemplateFormulas = (_a$3 = {},
1225
+ _a$3[exports.EMeasureTemplateNames.avg] = "avg({columnFormula})",
1226
+ _a$3[exports.EMeasureTemplateNames.count] = "count({columnFormula})",
1227
+ _a$3[exports.EMeasureTemplateNames.countDistinct] = "count(distinct {columnFormula})",
1228
+ _a$3[exports.EMeasureTemplateNames.median] = "medianExact({columnFormula})",
1229
+ _a$3[exports.EMeasureTemplateNames.min] = "min({columnFormula})",
1230
+ _a$3[exports.EMeasureTemplateNames.max] = "max({columnFormula})",
1231
+ _a$3[exports.EMeasureTemplateNames.sum] = "sum({columnFormula})",
1232
+ _a$3);
1233
+ var measureInnerTemplateFormulas = (_b = {},
1234
+ _b[exports.EMeasureInnerTemplateNames.begin] = "begin({columnFormula})",
1235
+ _b[exports.EMeasureInnerTemplateNames.end] = "end({columnFormula})",
1236
+ _b);
1093
1237
 
1094
1238
  /** Шаблон процессной метрики меры с режимом CONVERSION */
1095
- 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)";
1239
+ 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)";
1096
1240
  /** На основе значения режима CONVERSION подготовить параметры для подстановки в шаблонную формулу */
1097
1241
  var prepareConversionParams = function (value) {
1098
1242
  if (!value.startEventName ||
@@ -1107,15 +1251,14 @@ var prepareConversionParams = function (value) {
1107
1251
  return null;
1108
1252
  }
1109
1253
  return {
1110
- objectFilters: "1",
1111
1254
  startEventTimeFormula: value.startEventTimeFormula,
1112
1255
  startEventNameFormula: value.startEventNameFormula,
1113
1256
  startEventFilters: convertFiltersToFormula(value.startEventFilters),
1114
- startEventName: value.startEventName,
1257
+ startEventName: "'".concat(escapeSingularQuotes(value.startEventName), "'"),
1115
1258
  endEventTimeFormula: value.endEventTimeFormula,
1116
1259
  endCaseCaseIdFormula: value.endCaseCaseIdFormula,
1117
1260
  endEventNameFormula: value.endEventNameFormula,
1118
- endEventName: value.endEventName,
1261
+ endEventName: "'".concat(escapeSingularQuotes(value.endEventName), "'"),
1119
1262
  endEventFilters: convertFiltersToFormula(value.endEventFilters),
1120
1263
  };
1121
1264
  };
@@ -1123,7 +1266,7 @@ var prepareConversionParams = function (value) {
1123
1266
  /** Шаблоны процессных метрик меры с режимом DURATION */
1124
1267
  var durationTemplates = (function () {
1125
1268
  var _a;
1126
- 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 ";
1269
+ 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 ";
1127
1270
  return _a = {},
1128
1271
  _a[exports.EDurationTemplateName.avg] = "avgIf(".concat(innerTemplate, ")"),
1129
1272
  _a[exports.EDurationTemplateName.median] = "medianIf(".concat(innerTemplate, ")"),
@@ -1146,32 +1289,31 @@ var prepareDurationParams = function (value) {
1146
1289
  return appearance === exports.EEventAppearances.FIRST ? "minIf" : "maxIf";
1147
1290
  };
1148
1291
  return {
1149
- objectFilters: "1",
1150
1292
  startEventTimeFormula: value.startEventTimeFormula,
1151
1293
  startEventNameFormula: value.startEventNameFormula,
1152
1294
  startEventFilters: convertFiltersToFormula(value.startEventFilters),
1153
- startEventName: value.startEventName,
1295
+ startEventName: "'".concat(escapeSingularQuotes(value.startEventName), "'"),
1154
1296
  startEventAggregationName: getAggregationNameByAppearances(value.startEventAppearances),
1155
1297
  endEventTimeFormula: value.endEventTimeFormula,
1156
1298
  endCaseCaseIdFormula: value.endCaseCaseIdFormula,
1157
1299
  endEventNameFormula: value.endEventNameFormula,
1158
- endEventName: value.endEventName,
1300
+ endEventName: "'".concat(escapeSingularQuotes(value.endEventName), "'"),
1159
1301
  endEventFilters: convertFiltersToFormula(value.endEventFilters),
1160
1302
  endEventAggregationName: getAggregationNameByAppearances(value.endEventAppearances),
1161
1303
  };
1162
1304
  };
1163
1305
 
1164
1306
  function createAnyEventTemplate(aggregatePart) {
1165
- return "{outerAggregation}If(process(".concat(aggregatePart, ", {caseCaseIdFormula}), {objectFilters})");
1307
+ return "{outerAggregation}(process(".concat(aggregatePart, ", {caseCaseIdFormula}))");
1166
1308
  }
1167
1309
  function createSpecificEventTemplate(fn, additionalFn) {
1168
- return "{outerAggregation}If(process(".concat(fn, "(").concat(additionalFn ? "".concat(additionalFn, " ") : "", "{columnFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula}), {objectFilters})");
1310
+ return "{outerAggregation}(process(".concat(fn, "(").concat(additionalFn ? "".concat(additionalFn, " ") : "", "{columnFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula}))");
1169
1311
  }
1170
1312
  function createTopLikeTemplate(template) {
1171
1313
  return function (outerAggregation) {
1172
1314
  return outerAggregation === exports.EOuterAggregation.top
1173
- ? "{outerAggregation}KIf(1)(".concat(template, ", {objectFilters})[1]")
1174
- : "{outerAggregation}If(".concat(template, ", {objectFilters})");
1315
+ ? "{outerAggregation}K(1)(".concat(template, ")[1]")
1316
+ : "{outerAggregation}(".concat(template, ")");
1175
1317
  };
1176
1318
  }
1177
1319
  function createAggregationTemplate(templateName, _a) {
@@ -1218,9 +1360,9 @@ function createAggregationTemplate(templateName, _a) {
1218
1360
  ? createAnyEventTemplate("argMax({columnFormula}, {eventTimeFormula})")
1219
1361
  : createTopLikeTemplate(lastValueTemplate)(outerAggregation);
1220
1362
  case exports.EMeasureAggregationTemplateName.countExecutions:
1221
- return "{outerAggregation}If(".concat(countExecutionsTemplate, ", {objectFilters})");
1363
+ return "{outerAggregation}(".concat(countExecutionsTemplate, ")");
1222
1364
  case exports.EMeasureAggregationTemplateName.countReworks:
1223
- return "{outerAggregation}If(".concat(countReworksTemplate, ", {objectFilters})");
1365
+ return "{outerAggregation}(".concat(countReworksTemplate, ")");
1224
1366
  }
1225
1367
  }
1226
1368
 
@@ -1234,19 +1376,24 @@ function getMeasureFormula(_a) {
1234
1376
  return (_b = value.formula) !== null && _b !== void 0 ? _b : "";
1235
1377
  }
1236
1378
  if (value.mode === exports.EWidgetIndicatorValueModes.TEMPLATE) {
1237
- var templateName = value.templateName, tableName = value.tableName, columnName = value.columnName;
1379
+ var templateName = value.templateName, tableName = value.tableName, columnName = value.columnName, innerTemplateName = value.innerTemplateName;
1238
1380
  var templateFormula = measureTemplateFormulas[templateName];
1239
1381
  if (!templateFormula || !tableName || !columnName) {
1240
1382
  return "";
1241
1383
  }
1242
- return fillTemplateString(templateFormula, {
1243
- columnFormula: generateColumnFormula(tableName, columnName),
1384
+ var columnFormula = innerTemplateName
1385
+ ? fillTemplateSql(measureInnerTemplateFormulas[innerTemplateName], {
1386
+ columnFormula: generateColumnFormula(tableName, columnName),
1387
+ })
1388
+ : generateColumnFormula(tableName, columnName);
1389
+ return fillTemplateSql(templateFormula, {
1390
+ columnFormula: columnFormula,
1244
1391
  });
1245
1392
  }
1246
1393
  if (value.mode === exports.EWidgetIndicatorValueModes.AGGREGATION) {
1247
1394
  var preparedParams = prepareMeasureAggregationParams(value);
1248
1395
  return preparedParams
1249
- ? fillTemplateString(createAggregationTemplate(value.templateName, {
1396
+ ? fillTemplateSql(createAggregationTemplate(value.templateName, {
1250
1397
  outerAggregation: preparedParams.outerAggregation,
1251
1398
  anyEvent: value.anyEvent,
1252
1399
  }), preparedParams)
@@ -1257,28 +1404,28 @@ function getMeasureFormula(_a) {
1257
1404
  if (!preparedParams) {
1258
1405
  return "";
1259
1406
  }
1260
- return fillTemplateString(conversionTemplate, preparedParams);
1407
+ return fillTemplateSql(conversionTemplate, preparedParams);
1261
1408
  }
1262
1409
  if (value.mode === exports.EWidgetIndicatorValueModes.DURATION) {
1263
1410
  var preparedParams = prepareDurationParams(value);
1264
1411
  if (!preparedParams) {
1265
1412
  return "";
1266
1413
  }
1267
- return fillTemplateString(durationTemplates[value.templateName], preparedParams);
1414
+ return fillTemplateSql(durationTemplates[value.templateName], preparedParams);
1268
1415
  }
1269
1416
  return "";
1270
1417
  }
1271
1418
 
1272
- var _a$1;
1419
+ var _a$2;
1273
1420
  exports.EEventMeasureTemplateNames = void 0;
1274
1421
  (function (EEventMeasureTemplateNames) {
1275
1422
  EEventMeasureTemplateNames["eventsCount"] = "eventsCount";
1276
1423
  EEventMeasureTemplateNames["reworksCount"] = "reworksCount";
1277
1424
  })(exports.EEventMeasureTemplateNames || (exports.EEventMeasureTemplateNames = {}));
1278
- var eventMeasureTemplateFormulas = (_a$1 = {},
1279
- _a$1[exports.EEventMeasureTemplateNames.eventsCount] = "count()",
1280
- _a$1[exports.EEventMeasureTemplateNames.reworksCount] = "count() - uniqExact({caseCaseIdFormula})",
1281
- _a$1);
1425
+ var eventMeasureTemplateFormulas = (_a$2 = {},
1426
+ _a$2[exports.EEventMeasureTemplateNames.eventsCount] = "count()",
1427
+ _a$2[exports.EEventMeasureTemplateNames.reworksCount] = "count() - uniqExact({caseCaseIdFormula})",
1428
+ _a$2);
1282
1429
 
1283
1430
  function getEventMeasureFormula(_a, process) {
1284
1431
  var value = _a.value;
@@ -1290,21 +1437,21 @@ function getEventMeasureFormula(_a, process) {
1290
1437
  }
1291
1438
  if (value.mode === exports.EWidgetIndicatorValueModes.TEMPLATE) {
1292
1439
  var templateFormula = eventMeasureTemplateFormulas[value.templateName];
1293
- return templateFormula && fillTemplateString(templateFormula, process);
1440
+ return templateFormula && fillTemplateSql(templateFormula, process);
1294
1441
  }
1295
1442
  return "";
1296
1443
  }
1297
1444
 
1298
- var _a;
1445
+ var _a$1;
1299
1446
  exports.ETransitionMeasureTemplateNames = void 0;
1300
1447
  (function (ETransitionMeasureTemplateNames) {
1301
1448
  ETransitionMeasureTemplateNames["transitionsCount"] = "transitionsCount";
1302
1449
  ETransitionMeasureTemplateNames["medianTime"] = "medianTime";
1303
1450
  })(exports.ETransitionMeasureTemplateNames || (exports.ETransitionMeasureTemplateNames = {}));
1304
- var transitionMeasureTemplateFormulas = (_a = {},
1305
- _a[exports.ETransitionMeasureTemplateNames.transitionsCount] = "count()",
1306
- _a[exports.ETransitionMeasureTemplateNames.medianTime] = "medianExact(date_diff(second, begin({eventTimeFormula}), end({eventTimeFormula})))",
1307
- _a);
1451
+ var transitionMeasureTemplateFormulas = (_a$1 = {},
1452
+ _a$1[exports.ETransitionMeasureTemplateNames.transitionsCount] = "count()",
1453
+ _a$1[exports.ETransitionMeasureTemplateNames.medianTime] = "medianExact(date_diff(second, begin({eventTimeFormula}), end({eventTimeFormula})))",
1454
+ _a$1);
1308
1455
 
1309
1456
  function getTransitionMeasureFormula(_a, process) {
1310
1457
  var value = _a.value;
@@ -1316,52 +1463,16 @@ function getTransitionMeasureFormula(_a, process) {
1316
1463
  }
1317
1464
  if (value.mode === exports.EWidgetIndicatorValueModes.TEMPLATE) {
1318
1465
  var templateFormula = transitionMeasureTemplateFormulas[value.templateName];
1319
- return templateFormula && fillTemplateString(templateFormula, process);
1466
+ return templateFormula && fillTemplateSql(templateFormula, process);
1320
1467
  }
1321
1468
  return "";
1322
1469
  }
1323
1470
 
1324
- /** Удалить из строки символы экранирования */
1325
- function unescapeSpecialCharacters(str) {
1326
- return str.replace(/\\(?!\\)/g, "").replace(/\\\\/g, "\\");
1327
- }
1328
-
1329
- /**
1330
- * Регулярное выражение для поиска имени ссылки внутри формулы.
1331
- * Учитывает, что имя внутри формулы содержит экраны.
1332
- *
1333
- * Принцип работы:
1334
- * Пробовать следующие вхождения:
1335
- * - \\\\ - экранированный символ обратного слэша.
1336
- * - Иначе \\" - экранированный символ кавычки.
1337
- * - Иначе [^"] - любой символ кроме кавычки.
1338
- * Если встречается любой другой символ, то это закрывающая кавычка имени переменной.
1339
- */
1340
- var linkNameRegExp = "(?:\\\\\\\\|\\\\\"|[^\"])+";
1341
- var dashboardLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"(?!\\.\"").concat(linkNameRegExp, "\")"), "g");
1342
- var workspaceLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"\\.\"(").concat(linkNameRegExp, ")\""), "g");
1343
- var parseIndicatorLink = function (formula) {
1344
- var dashboardMatch = formula.match(dashboardLinkRegExp.source);
1345
- if (dashboardMatch) {
1346
- return { scopeName: null, indicatorName: dashboardMatch[1] };
1347
- }
1348
- var workspaceMatch = formula.match(workspaceLinkRegExp.source);
1349
- if (workspaceMatch) {
1350
- return {
1351
- scopeName: unescapeSpecialCharacters(workspaceMatch[1]),
1352
- indicatorName: unescapeSpecialCharacters(workspaceMatch[2]),
1353
- };
1354
- }
1355
- return null;
1356
- };
1357
-
1358
1471
  // Типы, используемые в значениях элементов управления.
1359
1472
  exports.EWidgetFilterMode = void 0;
1360
1473
  (function (EWidgetFilterMode) {
1361
1474
  EWidgetFilterMode["DEFAULT"] = "DEFAULT";
1362
1475
  EWidgetFilterMode["SINGLE"] = "SINGLE";
1363
- /** @deprecated Отказ от режима фильтрации "Множественный выбор"*/
1364
- EWidgetFilterMode["MULTI"] = "MULTI";
1365
1476
  EWidgetFilterMode["DISABLED"] = "DISABLED";
1366
1477
  })(exports.EWidgetFilterMode || (exports.EWidgetFilterMode = {}));
1367
1478
  exports.EMarkdownDisplayMode = void 0;
@@ -1536,7 +1647,9 @@ var getFormulaFilterValues = function (filterValue) {
1536
1647
  }
1537
1648
  return [];
1538
1649
  };
1539
- var applyIndexToArrayFormula = function (formula, index) { return "".concat(formula, "[").concat(index, "]"); };
1650
+ var applyIndexToArrayFormula = function (formula, index) {
1651
+ return "(".concat(formula, ")[").concat(index, "]");
1652
+ };
1540
1653
  var mapFormulaFilterToCalculatorInput = function (filterValue) {
1541
1654
  if (!filterValue) {
1542
1655
  return null;
@@ -1544,7 +1657,7 @@ var mapFormulaFilterToCalculatorInput = function (filterValue) {
1544
1657
  if (!isFormulaFilterValue(filterValue)) {
1545
1658
  return {
1546
1659
  dbDataType: exports.EClickHouseBaseTypes.Bool,
1547
- formula: fillTemplateString(displayConditionTemplate, {
1660
+ formula: fillTemplateSql(displayConditionTemplate, {
1548
1661
  formula: prepareFormulaForSql(filterValue.formula),
1549
1662
  }),
1550
1663
  values: ["true"],
@@ -1579,6 +1692,46 @@ var mapFormulaFiltersToInputs = function (filters) {
1579
1692
  return compactMap(filters, mapFormulaFilterToCalculatorInput);
1580
1693
  };
1581
1694
 
1695
+ var _a;
1696
+ var intervalByUnit = (_a = {},
1697
+ _a[exports.EDimensionProcessFilterTimeUnit.YEARS] = "year",
1698
+ _a[exports.EDimensionProcessFilterTimeUnit.MONTHS] = "month",
1699
+ _a[exports.EDimensionProcessFilterTimeUnit.DAYS] = "day",
1700
+ _a[exports.EDimensionProcessFilterTimeUnit.HOURS] = "hour",
1701
+ _a[exports.EDimensionProcessFilterTimeUnit.MINUTES] = "minute",
1702
+ _a);
1703
+ function mapDimensionProcessFilterToCalculatorInput(filter) {
1704
+ var formula = filter.value.mode === exports.EWidgetIndicatorValueModes.FORMULA
1705
+ ? filter.value.formula
1706
+ : getProcessDimensionValueFormula(filter.value);
1707
+ if (formula === undefined) {
1708
+ throw new Error("Formula generation error");
1709
+ }
1710
+ var _a = filter.condition, timeUnit = _a.timeUnit, filteringMethod = _a.filteringMethod, values = _a.values;
1711
+ if (filteringMethod === "LAST_TIME") {
1712
+ if (!timeUnit) {
1713
+ throw new Error("Missing time unit");
1714
+ }
1715
+ return {
1716
+ dbDataType: exports.EClickHouseBaseTypes.Bool,
1717
+ formula: "date_diff('".concat(intervalByUnit[timeUnit], "', ").concat(formula, ", now())"),
1718
+ values: values,
1719
+ filteringMethod: formulaFilterMethods.LESS_THAN_OR_EQUAL_TO,
1720
+ };
1721
+ }
1722
+ return { formula: formula, filteringMethod: filteringMethod, values: values, dbDataType: filter.dbDataType };
1723
+ }
1724
+
1725
+ var mapSettingsFilterToCalculatorInput = function (filter) {
1726
+ if (isDimensionProcessFilter(filter)) {
1727
+ return mapDimensionProcessFilterToCalculatorInput(filter);
1728
+ }
1729
+ return mapFormulaFilterToCalculatorInput(filter);
1730
+ };
1731
+ var mapSettingsFiltersToInputs = function (filters) {
1732
+ return compactMap(filters, mapSettingsFilterToCalculatorInput);
1733
+ };
1734
+
1582
1735
  function mapMeasureToInput(measure, variables, addFormulas) {
1583
1736
  if (addFormulas === void 0) { addFormulas = function () { return new Map(); }; }
1584
1737
  var mainFormula = getMeasureFormula(measure);
@@ -1720,7 +1873,8 @@ var getDefaultSortOrders = function (_a) {
1720
1873
  }
1721
1874
  /** Если есть временной разрез, то авто-сортировка по первому такому разрезу (по возрастанию) */
1722
1875
  var timeDimension = dimensions.find(function (dimension) {
1723
- return dimension.format &&
1876
+ var _a;
1877
+ return ((_a = dimension.format) === null || _a === void 0 ? void 0 : _a.value) &&
1724
1878
  [
1725
1879
  exports.EFormatTypes.DATE,
1726
1880
  exports.EFormatTypes.MONTH,
@@ -1733,7 +1887,7 @@ var getDefaultSortOrders = function (_a) {
1733
1887
  exports.EFormatTypes.QUARTER_YEAR,
1734
1888
  exports.EFormatTypes.DAY_OF_MONTH,
1735
1889
  exports.EFormatTypes.WEEK,
1736
- ].includes(dimension.format);
1890
+ ].includes(dimension.format.value);
1737
1891
  });
1738
1892
  if (timeDimension) {
1739
1893
  return [
@@ -1837,6 +1991,8 @@ exports.EControlType = void 0;
1837
1991
  (function (EControlType) {
1838
1992
  /** Ввод текста */
1839
1993
  EControlType["input"] = "input";
1994
+ /** Ввод текста с поддержкой шаблонной вставки сущностей */
1995
+ EControlType["inputTemplate"] = "inputTemplate";
1840
1996
  /** Ввод текста в формате markdown */
1841
1997
  EControlType["inputMarkdown"] = "inputMarkdown";
1842
1998
  /** Ввод числа */
@@ -1950,19 +2106,6 @@ var updateSingleModeSelection = function (selection, formula, value) {
1950
2106
  replacedFilter: null,
1951
2107
  });
1952
2108
  };
1953
- /** @deprecated Отказ от режима фильтрации "Множественный выбор"*/
1954
- var updateMultiModeSelection = function (selection, formula, value) {
1955
- var _a;
1956
- var selectionItemValues = getSelectionItemValues(value, exports.EWidgetFilterMode.MULTI, (_a = selection.get(formula)) === null || _a === void 0 ? void 0 : _a.values);
1957
- if (!selectionItemValues.size) {
1958
- selection.delete(formula);
1959
- return;
1960
- }
1961
- selection.set(formula, {
1962
- values: selectionItemValues,
1963
- replacedFilter: null,
1964
- });
1965
- };
1966
2109
  var replaceFiltersBySelection = function (filters, selection) {
1967
2110
  return filters.reduce(function (acc, filter) {
1968
2111
  var _a;
@@ -2102,14 +2245,19 @@ exports.conversionTemplate = conversionTemplate;
2102
2245
  exports.convertFiltersToFormula = convertFiltersToFormula;
2103
2246
  exports.convertToFormulasChain = convertToFormulasChain;
2104
2247
  exports.countExecutionsTemplate = countExecutionsTemplate;
2248
+ exports.createEscaper = createEscaper;
2105
2249
  exports.createMeasureAggregationTemplate = createAggregationTemplate;
2250
+ exports.curlyBracketsContentPattern = curlyBracketsContentPattern;
2106
2251
  exports.dashboardLinkRegExp = dashboardLinkRegExp;
2107
2252
  exports.dimensionAggregationTemplates = dimensionAggregationTemplates;
2108
2253
  exports.dimensionTemplateFormulas = dimensionTemplateFormulas;
2109
2254
  exports.displayConditionTemplate = displayConditionTemplate;
2255
+ exports.doubleQuoteContentPattern = doubleQuoteContentPattern;
2110
2256
  exports.durationTemplates = durationTemplates;
2111
- exports.escapeSpecialCharacters = escapeSpecialCharacters;
2257
+ exports.escapeCurlyBracketLinkName = escapeCurlyBracketLinkName;
2258
+ exports.escapeDoubleQuoteLinkName = escapeDoubleQuoteLinkName;
2112
2259
  exports.eventMeasureTemplateFormulas = eventMeasureTemplateFormulas;
2260
+ exports.fillTemplateSql = fillTemplateSql;
2113
2261
  exports.fillTemplateString = fillTemplateString;
2114
2262
  exports.formattingConfig = formattingConfig;
2115
2263
  exports.formulaFilterMethods = formulaFilterMethods;
@@ -2121,19 +2269,22 @@ exports.getDisplayConditionFormula = getDisplayConditionFormula;
2121
2269
  exports.getEventMeasureFormula = getEventMeasureFormula;
2122
2270
  exports.getLocalizedText = getLocalizedText;
2123
2271
  exports.getMeasureFormula = getMeasureFormula;
2272
+ exports.getProcessDimensionValueFormula = getProcessDimensionValueFormula;
2124
2273
  exports.getRuleColor = getRuleColor;
2125
2274
  exports.getTransitionMeasureFormula = getTransitionMeasureFormula;
2275
+ exports.isDimensionProcessFilter = isDimensionProcessFilter;
2126
2276
  exports.isDimensionsHierarchy = isDimensionsHierarchy;
2127
2277
  exports.isFormulaFilterValue = isFormulaFilterValue;
2128
2278
  exports.isValidColor = isValidColor;
2129
- exports.linkNameRegExp = linkNameRegExp;
2130
2279
  exports.mapDimensionsToInputs = mapDimensionsToInputs;
2131
2280
  exports.mapEventMeasuresToInputs = mapEventMeasuresToInputs;
2132
2281
  exports.mapFormulaFilterToCalculatorInput = mapFormulaFilterToCalculatorInput;
2133
2282
  exports.mapFormulaFiltersToInputs = mapFormulaFiltersToInputs;
2134
2283
  exports.mapMeasuresToInputs = mapMeasuresToInputs;
2284
+ exports.mapSettingsFiltersToInputs = mapSettingsFiltersToInputs;
2135
2285
  exports.mapSortingToInputs = mapSortingToInputs;
2136
2286
  exports.mapTransitionMeasuresToInputs = mapTransitionMeasuresToInputs;
2287
+ exports.measureInnerTemplateFormulas = measureInnerTemplateFormulas;
2137
2288
  exports.measureTemplateFormulas = measureTemplateFormulas;
2138
2289
  exports.parseClickHouseType = parseClickHouseType;
2139
2290
  exports.parseIndicatorLink = parseIndicatorLink;
@@ -2153,6 +2304,5 @@ exports.timeTemplates = timeTemplates;
2153
2304
  exports.transitionMeasureTemplateFormulas = transitionMeasureTemplateFormulas;
2154
2305
  exports.unescapeSpecialCharacters = unescapeSpecialCharacters;
2155
2306
  exports.updateDefaultModeSelection = updateDefaultModeSelection;
2156
- exports.updateMultiModeSelection = updateMultiModeSelection;
2157
2307
  exports.updateSingleModeSelection = updateSingleModeSelection;
2158
2308
  exports.workspaceLinkRegExp = workspaceLinkRegExp;