fantasy-ngzorro 1.3.33 → 1.3.34

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/esm2015/utils.js CHANGED
@@ -2,76 +2,99 @@
2
2
  * @fileoverview added by tsickle
3
3
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
+ import { round } from 'lodash';
5
6
  // 工具类
6
- const ɵ0 = /**
7
- * @param {?} formList
8
- * @param {?} name
9
- * @param {?} options
10
- * @return {?}
11
- */
12
- function (formList, name, options) {
13
- /** @type {?} */
14
- let returnData = formList;
15
- if (!returnData || !returnData.length) {
16
- return returnData;
17
- }
18
- /** @type {?} */
19
- const length = formList.length;
20
- for (let i = 0; i < length; i++) {
21
- if (returnData[i].name === name) {
22
- returnData[i].selectOption.selectList = options;
7
+ /** @type {?} */
8
+ export const Utils = {
9
+ /**
10
+ * 填充select控件选项
11
+ * @param {?} formList 入参数组 Array<any>
12
+ * @param {?} name 需要填充options的属性名称
13
+ * @param {?} options 选项列表
14
+ * @return {?}
15
+ */
16
+ fillSelectOption(formList, name, options) {
17
+ /** @type {?} */
18
+ const returnData = formList;
19
+ if (!returnData || !returnData.length) {
20
+ return returnData;
23
21
  }
24
- }
25
- return returnData;
26
- }, ɵ1 = /**
27
- * @param {?} list
28
- * @param {?} obj
29
- * @return {?}
30
- */
31
- function (list, obj) {
32
- /** @type {?} */
33
- let returnData = [];
34
- if (!list || !list.length) {
35
- return returnData;
36
- }
37
- /** @type {?} */
38
- const length = list.length;
39
- for (let i = 0; i < length; i++) {
40
- if (obj[list[i].name]) {
41
- list[i].value = obj[list[i].name];
22
+ /** @type {?} */
23
+ const length = formList.length;
24
+ for (let i = 0; i < length; i++) {
25
+ if (returnData[i].name === name) {
26
+ returnData[i].selectOption.selectList = options;
27
+ }
42
28
  }
43
- }
44
- return list;
45
- }, ɵ2 = /**
46
- * @param {?} list
47
- * @param {?=} option
48
- * @return {?}
49
- */
50
- function (list, option) {
51
- /** @type {?} */
52
- let returnData = [];
53
- if (!list || !list.length) {
54
29
  return returnData;
55
- }
56
- if (option) {
57
- if (option.labelTip && option.valueTip) {
58
- list.forEach((/**
59
- * @param {?} item
60
- * @return {?}
61
- */
62
- (item) => {
63
- /** @type {?} */
64
- let returnItem = item;
65
- returnItem.label = item[option.label];
66
- returnItem.value = item[option.value];
67
- if (option.valueTip) {
68
- returnItem[option.valueTip] = item[option.value];
69
- }
70
- if (option.labelTip) {
71
- returnItem[option.labelTip] = item[option.label];
72
- }
73
- returnData.push(returnItem);
74
- }));
30
+ },
31
+ /**
32
+ * 填充FormItem数组:针对入参list的每一个FormItem,判断obj中是否有对应的name字段,如果有,则填充value。
33
+ * @param {?} list 入参数组 Array<FormItem>
34
+ * @param {?} obj 需要填充到list的属性
35
+ * @return {?}
36
+ */
37
+ fillArrayFormItem(list, obj) {
38
+ /** @type {?} */
39
+ const returnData = [];
40
+ if (!list || !list.length) {
41
+ return returnData;
42
+ }
43
+ /** @type {?} */
44
+ const length = list.length;
45
+ for (let i = 0; i < length; i++) {
46
+ if (obj[list[i].name]) {
47
+ list[i].value = obj[list[i].name];
48
+ }
49
+ }
50
+ return list;
51
+ },
52
+ /**
53
+ * 数组转换成选择器的选项数组
54
+ * @param {?} list 入参数组 字符串数组或对象数组
55
+ * @param {?=} option 转换选项
56
+ * 注:list为字符串数组,option不需要传,按照标准的label、value转换
57
+ * @return {?}
58
+ */
59
+ arrayToSelectOptionList(list, option) {
60
+ /** @type {?} */
61
+ const returnData = [];
62
+ if (!list || !list.length) {
63
+ return returnData;
64
+ }
65
+ if (option) {
66
+ if (option.labelTip && option.valueTip) {
67
+ list.forEach((/**
68
+ * @param {?} item
69
+ * @return {?}
70
+ */
71
+ (item) => {
72
+ /** @type {?} */
73
+ const returnItem = item;
74
+ returnItem.label = item[option.label];
75
+ returnItem.value = item[option.value];
76
+ if (option.valueTip) {
77
+ returnItem[option.valueTip] = item[option.value];
78
+ }
79
+ if (option.labelTip) {
80
+ returnItem[option.labelTip] = item[option.label];
81
+ }
82
+ returnData.push(returnItem);
83
+ }));
84
+ }
85
+ else {
86
+ list.forEach((/**
87
+ * @param {?} item
88
+ * @return {?}
89
+ */
90
+ (item) => {
91
+ /** @type {?} */
92
+ const returnItem = item;
93
+ returnItem.label = item[option.label];
94
+ returnItem.value = item[option.value];
95
+ returnData.push(returnItem);
96
+ }));
97
+ }
75
98
  }
76
99
  else {
77
100
  list.forEach((/**
@@ -80,50 +103,118 @@ function (list, option) {
80
103
  */
81
104
  (item) => {
82
105
  /** @type {?} */
83
- let returnItem = item;
84
- returnItem.label = item[option.label];
85
- returnItem.value = item[option.value];
106
+ const returnItem = {};
107
+ returnItem.label = item;
108
+ returnItem.value = item;
86
109
  returnData.push(returnItem);
87
110
  }));
88
111
  }
89
- }
90
- else {
91
- list.forEach((/**
92
- * @param {?} item
112
+ return returnData;
113
+ },
114
+ /**
115
+ * 求和
116
+ * @param {?} nums 数组
117
+ * @param {?=} precision 精度
118
+ * @return {?}
119
+ */
120
+ add(nums, precision = 2) {
121
+ if (!Array.isArray(nums)) {
122
+ throw new Error('参数必须是数组');
123
+ }
124
+ if (nums.some((/**
125
+ * @param {?} num
93
126
  * @return {?}
94
127
  */
95
- (item) => {
96
- /** @type {?} */
97
- let returnItem = {};
98
- returnItem.label = item;
99
- returnItem.value = item;
100
- returnData.push(returnItem);
101
- }));
102
- }
103
- return returnData;
104
- };
105
- /** @type {?} */
106
- export const Utils = {
128
+ num => typeof num !== 'number'))) {
129
+ throw new Error('数组元素必须是数字');
130
+ }
131
+ /** @type {?} */
132
+ let result = 0;
133
+ for (const num of nums) {
134
+ result += num;
135
+ }
136
+ return round(result, precision);
137
+ },
107
138
  /**
108
- * 填充select控件选项
109
- * @param formList 入参数组 Array<any>
110
- * @param name 需要填充options的属性名称
111
- * @param options 选项列表
139
+ * 减法
140
+ * @param {?} nums 数组
141
+ * @param {?=} precision 精度
142
+ * @return {?}
112
143
  */
113
- fillSelectOption: (ɵ0),
144
+ subtract(nums, precision = 2) {
145
+ if (!Array.isArray(nums)) {
146
+ throw new Error('参数必须是数组');
147
+ }
148
+ if (nums.some((/**
149
+ * @param {?} num
150
+ * @return {?}
151
+ */
152
+ num => typeof num !== 'number'))) {
153
+ throw new Error('数组元素必须是数字');
154
+ }
155
+ if (nums.length < 2) {
156
+ throw new Error('减法入参数量至少要2个!');
157
+ }
158
+ /** @type {?} */
159
+ let result = nums.shift();
160
+ for (const num of nums) {
161
+ result -= num;
162
+ }
163
+ return round(result, precision);
164
+ },
114
165
  /**
115
- * 填充FormItem数组:针对入参list的每一个FormItem,判断obj中是否有对应的name字段,如果有,则填充value。
116
- * @param list 入参数组 Array<FormItem>
117
- * @param obj 需要填充到list的属性
166
+ * 乘法
167
+ * @param {?} nums 数组
168
+ * @param {?=} precision 精度
169
+ * @return {?}
118
170
  */
119
- fillArrayFormItem: (ɵ1),
171
+ multiply(nums, precision = 2) {
172
+ if (!Array.isArray(nums)) {
173
+ throw new Error('参数必须是数组');
174
+ }
175
+ if (nums.some((/**
176
+ * @param {?} num
177
+ * @return {?}
178
+ */
179
+ num => typeof num !== 'number'))) {
180
+ throw new Error('数组元素必须是数字');
181
+ }
182
+ /** @type {?} */
183
+ let result = 1;
184
+ for (const num of nums) {
185
+ result = result * num;
186
+ }
187
+ return round(result, precision);
188
+ },
120
189
  /**
121
- * 数组转换成选择器的选项数组
122
- * @param list 入参数组 字符串数组或对象数组
123
- * @param option 转换选项
124
- * 注:list为字符串数组,option不需要传,按照标准的label、value转换
190
+ * 除法
191
+ * @param {?} nums 数组
192
+ * @param {?=} precision 精度
193
+ * @return {?}
125
194
  */
126
- arrayToSelectOptionList: 2)
195
+ divide(nums, precision = 2) {
196
+ if (!Array.isArray(nums)) {
197
+ throw new Error('参数必须是数组');
198
+ }
199
+ if (nums.some((/**
200
+ * @param {?} num
201
+ * @return {?}
202
+ */
203
+ num => typeof num !== 'number'))) {
204
+ throw new Error('数组元素必须是数字');
205
+ }
206
+ if (nums.length < 2) {
207
+ throw new Error('除法入参数量至少要2个!');
208
+ }
209
+ /** @type {?} */
210
+ let result = nums.shift();
211
+ for (const num of nums) {
212
+ if (num === 0) {
213
+ throw new Error('除数不能为0!');
214
+ }
215
+ result = result / num;
216
+ }
217
+ return round(result, precision);
218
+ }
127
219
  };
128
- export { ɵ0, ɵ1, ɵ2 };
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVVvQixVQUFVLFFBQW9CLEVBQUUsSUFBWSxFQUFFLE9BQW1COztRQUM3RSxVQUFVLEdBQUcsUUFBUTtJQUN6QixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUNyQyxPQUFPLFVBQVUsQ0FBQztLQUNuQjs7VUFDSyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU07SUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQixJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQy9CLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztTQUNqRDtLQUNGO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQzs7Ozs7QUFPa0IsVUFBVSxJQUFxQixFQUFFLEdBQVc7O1FBQ3pELFVBQVUsR0FBRyxFQUFFO0lBQ25CLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ3pCLE9BQU8sVUFBVSxDQUFDO0tBQ25COztVQUNLLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTtJQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQy9CLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7S0FDRjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQzs7Ozs7QUFRd0IsVUFBVSxJQUFnQixFQUFFLE1BQStFOztRQUM5SCxVQUFVLEdBQUcsRUFBRTtJQUNuQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUN6QixPQUFPLFVBQVUsQ0FBQztLQUNuQjtJQUNELElBQUksTUFBTSxFQUFFO1FBQ1YsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDdEMsSUFBSSxDQUFDLE9BQU87Ozs7WUFBQyxDQUFDLElBQUksRUFBRSxFQUFFOztvQkFDaEIsVUFBVSxHQUFRLElBQUk7Z0JBQzFCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEQ7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO29CQUNuQixVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2xEO2dCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxFQUFDLENBQUE7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU87Ozs7WUFBQyxDQUFDLElBQUksRUFBRSxFQUFFOztvQkFDaEIsVUFBVSxHQUFRLElBQUk7Z0JBQzFCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLENBQUMsRUFBQyxDQUFBO1NBQ0g7S0FDRjtTQUFNO1FBQ0wsSUFBSSxDQUFDLE9BQU87Ozs7UUFBQyxDQUFDLElBQUksRUFBRSxFQUFFOztnQkFDaEIsVUFBVSxHQUFRLEVBQUU7WUFDeEIsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDeEIsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDeEIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUMsQ0FBQTtLQUNIO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQzs7QUFsRkgsTUFBTSxPQUFPLEtBQUssR0FBRzs7Ozs7OztJQU9uQixnQkFBZ0IsTUFZZjs7Ozs7O0lBT0QsaUJBQWlCLE1BWWhCOzs7Ozs7O0lBUUQsdUJBQXVCLE1Bb0N0QjtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUl0ZW0gfSBmcm9tIFwiLi9oZC1mb3JtL2hkLWZvcm0uc2VydmljZVwiO1xuXG4vLyDlt6XlhbfnsbtcbmV4cG9ydCBjb25zdCBVdGlscyA9IHtcbiAgLyoqXG4gICAqIOWhq+WFhXNlbGVjdOaOp+S7tumAiemhuVxuICAgKiBAcGFyYW0gZm9ybUxpc3Qg5YWl5Y+C5pWw57uEIEFycmF5PGFueT5cbiAgICogQHBhcmFtIG5hbWUg6ZyA6KaB5aGr5YWFb3B0aW9uc+eahOWxnuaAp+WQjeensFxuICAgKiBAcGFyYW0gb3B0aW9ucyDpgInpobnliJfooahcbiAgICovXG4gIGZpbGxTZWxlY3RPcHRpb246IGZ1bmN0aW9uIChmb3JtTGlzdDogQXJyYXk8YW55PiwgbmFtZTogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxhbnk+KSB7XG4gICAgbGV0IHJldHVybkRhdGEgPSBmb3JtTGlzdDtcbiAgICBpZiAoIXJldHVybkRhdGEgfHwgIXJldHVybkRhdGEubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcmV0dXJuRGF0YTtcbiAgICB9XG4gICAgY29uc3QgbGVuZ3RoID0gZm9ybUxpc3QubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZXR1cm5EYXRhW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuRGF0YVtpXS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdCA9IG9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5EYXRhO1xuICB9LFxuXG4gIC8qKlxuICAgKiDloavlhYVGb3JtSXRlbeaVsOe7hO+8mumSiOWvueWFpeWPgmxpc3TnmoTmr4/kuIDkuKpGb3JtSXRlbe+8jOWIpOaWrW9iauS4reaYr+WQpuacieWvueW6lOeahG5hbWXlrZfmrrXvvIzlpoLmnpzmnInvvIzliJnloavlhYV2YWx1ZeOAglxuICAgKiBAcGFyYW0gbGlzdCDlhaXlj4LmlbDnu4QgQXJyYXk8Rm9ybUl0ZW0+XG4gICAqIEBwYXJhbSBvYmog6ZyA6KaB5aGr5YWF5YiwbGlzdOeahOWxnuaAp1xuICAgKi9cbiAgZmlsbEFycmF5Rm9ybUl0ZW06IGZ1bmN0aW9uIChsaXN0OiBBcnJheTxGb3JtSXRlbT4sIG9iajogT2JqZWN0KSB7XG4gICAgbGV0IHJldHVybkRhdGEgPSBbXTtcbiAgICBpZiAoIWxpc3QgfHwgIWxpc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcmV0dXJuRGF0YTtcbiAgICB9XG4gICAgY29uc3QgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9ialtsaXN0W2ldLm5hbWVdKSB7XG4gICAgICAgIGxpc3RbaV0udmFsdWUgPSBvYmpbbGlzdFtpXS5uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sXG5cbiAgLyoqXG4gICAqIOaVsOe7hOi9rOaNouaIkOmAieaLqeWZqOeahOmAiemhueaVsOe7hFxuICAgKiBAcGFyYW0gbGlzdCDlhaXlj4LmlbDnu4Qg5a2X56ym5Liy5pWw57uE5oiW5a+56LGh5pWw57uEXG4gICAqIEBwYXJhbSBvcHRpb24g6L2s5o2i6YCJ6aG5XG4gICAqIOazqO+8mmxpc3TkuLrlrZfnrKbkuLLmlbDnu4TvvIxvcHRpb27kuI3pnIDopoHkvKDvvIzmjInnhafmoIflh4bnmoRsYWJlbOOAgXZhbHVl6L2s5o2iXG4gICAqL1xuICBhcnJheVRvU2VsZWN0T3B0aW9uTGlzdDogZnVuY3Rpb24gKGxpc3Q6IEFycmF5PGFueT4sIG9wdGlvbj86IHsgdmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZywgdmFsdWVUaXA/OiBzdHJpbmcsIGxhYmVsVGlwPzogc3RyaW5nIH0pIHtcbiAgICBsZXQgcmV0dXJuRGF0YSA9IFtdO1xuICAgIGlmICghbGlzdCB8fCAhbGlzdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiByZXR1cm5EYXRhO1xuICAgIH1cbiAgICBpZiAob3B0aW9uKSB7XG4gICAgICBpZiAob3B0aW9uLmxhYmVsVGlwICYmIG9wdGlvbi52YWx1ZVRpcCkge1xuICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBsZXQgcmV0dXJuSXRlbTogYW55ID0gaXRlbTtcbiAgICAgICAgICByZXR1cm5JdGVtLmxhYmVsID0gaXRlbVtvcHRpb24ubGFiZWxdO1xuICAgICAgICAgIHJldHVybkl0ZW0udmFsdWUgPSBpdGVtW29wdGlvbi52YWx1ZV07XG4gICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZVRpcCkge1xuICAgICAgICAgICAgcmV0dXJuSXRlbVtvcHRpb24udmFsdWVUaXBdID0gaXRlbVtvcHRpb24udmFsdWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9uLmxhYmVsVGlwKSB7XG4gICAgICAgICAgICByZXR1cm5JdGVtW29wdGlvbi5sYWJlbFRpcF0gPSBpdGVtW29wdGlvbi5sYWJlbF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybkRhdGEucHVzaChyZXR1cm5JdGVtKTtcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGxldCByZXR1cm5JdGVtOiBhbnkgPSBpdGVtO1xuICAgICAgICAgIHJldHVybkl0ZW0ubGFiZWwgPSBpdGVtW29wdGlvbi5sYWJlbF07XG4gICAgICAgICAgcmV0dXJuSXRlbS52YWx1ZSA9IGl0ZW1bb3B0aW9uLnZhbHVlXTtcbiAgICAgICAgICByZXR1cm5EYXRhLnB1c2gocmV0dXJuSXRlbSk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBsZXQgcmV0dXJuSXRlbTogYW55ID0ge307XG4gICAgICAgIHJldHVybkl0ZW0ubGFiZWwgPSBpdGVtO1xuICAgICAgICByZXR1cm5JdGVtLnZhbHVlID0gaXRlbTtcbiAgICAgICAgcmV0dXJuRGF0YS5wdXNoKHJldHVybkl0ZW0pO1xuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJldHVybkRhdGE7XG4gIH1cbn1cbiJdfQ==
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQzs7O0FBRS9CLE1BQU0sT0FBTyxLQUFLLEdBQUc7Ozs7Ozs7O0lBT25CLGdCQUFnQixDQUFDLFFBQW9CLEVBQUUsSUFBWSxFQUFFLE9BQW1COztjQUNoRSxVQUFVLEdBQUcsUUFBUTtRQUMzQixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNyQyxPQUFPLFVBQVUsQ0FBQztTQUNuQjs7Y0FDSyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU07UUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQixJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUMvQixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7YUFDakQ7U0FDRjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Ozs7Ozs7SUFPRCxpQkFBaUIsQ0FBQyxJQUFxQixFQUFFLEdBQVc7O2NBQzVDLFVBQVUsR0FBRyxFQUFFO1FBQ3JCLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3pCLE9BQU8sVUFBVSxDQUFDO1NBQ25COztjQUNLLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTtRQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9CLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFB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QyxDQUFDO0lBQ2xDLENBQUM7Ozs7Ozs7SUFPRCxNQUFNLENBQUMsSUFBYyxFQUFFLFlBQW9CLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksSUFBSSxDQUFDLElBQUk7Ozs7UUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBQyxFQUFFO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUI7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDakM7O1lBQ0csTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDNUI7WUFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUNELE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtSXRlbSB9IGZyb20gJy4vaGQtZm9ybS9oZC1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tICdsb2Rhc2gnO1xuLy8g5bel5YW357G7XG5leHBvcnQgY29uc3QgVXRpbHMgPSB7XG4gIC8qKlxuICAgKiDloavlhYVzZWxlY3Tmjqfku7bpgInpoblcbiAgICogQHBhcmFtIGZvcm1MaXN0IOWFpeWPguaVsOe7hCBBcnJheTxhbnk+XG4gICAqIEBwYXJhbSBuYW1lIOmcgOimgeWhq+WFhW9wdGlvbnPnmoTlsZ7mgKflkI3np7BcbiAgICogQHBhcmFtIG9wdGlvbnMg6YCJ6aG55YiX6KGoXG4gICAqL1xuICBmaWxsU2VsZWN0T3B0aW9uKGZvcm1MaXN0OiBBcnJheTxhbnk+LCBuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IEFycmF5PGFueT4pIHtcbiAgICBjb25zdCByZXR1cm5EYXRhID0gZm9ybUxpc3Q7XG4gICAgaWYgKCFyZXR1cm5EYXRhIHx8ICFyZXR1cm5EYXRhLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJldHVybkRhdGE7XG4gICAgfVxuICAgIGNvbnN0IGxlbmd0aCA9IGZvcm1MaXN0Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmV0dXJuRGF0YVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybkRhdGFbaV0uc2VsZWN0T3B0aW9uLnNlbGVjdExpc3QgPSBvcHRpb25zO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuRGF0YTtcbiAgfSxcblxuICAvKipcbiAgICog5aGr5YWFRm9ybUl0ZW3mlbDnu4TvvJrpkojlr7nlhaXlj4JsaXN055qE5q+P5LiA5LiqRm9ybUl0ZW3vvIzliKTmlq1vYmrkuK3mmK/lkKbmnInlr7nlupTnmoRuYW1l5a2X5q6177yM5aaC5p6c5pyJ77yM5YiZ5aGr5YWFdmFsdWXjgIJcbiAgICogQHBhcmFtIGxpc3Qg5YWl5Y+C5pWw57uEIEFycmF5PEZvcm1JdGVtPlxuICAgKiBAcGFyYW0gb2JqIOmcgOimgeWhq+WFheWIsGxpc3TnmoTlsZ7mgKdcbiAgICovXG4gIGZpbGxBcnJheUZvcm1JdGVtKGxpc3Q6IEFycmF5PEZvcm1JdGVtPiwgb2JqOiBPYmplY3QpIHtcbiAgICBjb25zdCByZXR1cm5EYXRhID0gW107XG4gICAgaWYgKCFsaXN0IHx8ICFsaXN0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJldHVybkRhdGE7XG4gICAgfVxuICAgIGNvbnN0IGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvYmpbbGlzdFtpXS5uYW1lXSkge1xuICAgICAgICBsaXN0W2ldLnZhbHVlID0gb2JqW2xpc3RbaV0ubmFtZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9LFxuXG4gIC8qKlxuICAgKiDmlbDnu4TovazmjaLmiJDpgInmi6nlmajnmoTpgInpobnmlbDnu4RcbiAgICogQHBhcmFtIGxpc3Qg5YWl5Y+C5pWw57uEIOWtl+espuS4suaVsOe7hOaIluWvueixoeaVsOe7hFxuICAgKiBAcGFyYW0gb3B0aW9uIOi9rOaNoumAiemhuVxuICAgKiDms6jvvJpsaXN05Li65a2X56ym5Liy5pWw57uE77yMb3B0aW9u5LiN6ZyA6KaB5Lyg77yM5oyJ54Wn5qCH5YeG55qEbGFiZWzjgIF2YWx1Zei9rOaNolxuICAgKi9cbiAgYXJyYXlUb1NlbGVjdE9wdGlvbkxpc3QobGlzdDogQXJyYXk8YW55Piwgb3B0aW9uPzoge1xuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICB2YWx1ZVRpcD86IHN0cmluZyxcbiAgICBsYWJlbFRpcD86IHN0cmluZ1xuICB9KSB7XG4gICAgY29uc3QgcmV0dXJuRGF0YSA9IFtdO1xuICAgIGlmICghbGlzdCB8fCAhbGlzdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiByZXR1cm5EYXRhO1xuICAgIH1cbiAgICBpZiAob3B0aW9uKSB7XG4gICAgICBpZiAob3B0aW9uLmxhYmVsVGlwICYmIG9wdGlvbi52YWx1ZVRpcCkge1xuICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCByZXR1cm5JdGVtOiBhbnkgPSBpdGVtO1xuICAgICAgICAgIHJldHVybkl0ZW0ubGFiZWwgPSBpdGVtW29wdGlvbi5sYWJlbF07XG4gICAgICAgICAgcmV0dXJuSXRlbS52YWx1ZSA9IGl0ZW1bb3B0aW9uLnZhbHVlXTtcbiAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlVGlwKSB7XG4gICAgICAgICAgICByZXR1cm5JdGVtW29wdGlvbi52YWx1ZVRpcF0gPSBpdGVtW29wdGlvbi52YWx1ZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb24ubGFiZWxUaXApIHtcbiAgICAgICAgICAgIHJldHVybkl0ZW1bb3B0aW9uLmxhYmVsVGlwXSA9IGl0ZW1bb3B0aW9uLmxhYmVsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuRGF0YS5wdXNoKHJldHVybkl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJldHVybkl0ZW06IGFueSA9IGl0ZW07XG4gICAgICAgICAgcmV0dXJuSXRlbS5sYWJlbCA9IGl0ZW1bb3B0aW9uLmxhYmVsXTtcbiAgICAgICAgICByZXR1cm5JdGVtLnZhbHVlID0gaXRlbVtvcHRpb24udmFsdWVdO1xuICAgICAgICAgIHJldHVybkRhdGEucHVzaChyZXR1cm5JdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCByZXR1cm5JdGVtOiBhbnkgPSB7fTtcbiAgICAgICAgcmV0dXJuSXRlbS5sYWJlbCA9IGl0ZW07XG4gICAgICAgIHJldHVybkl0ZW0udmFsdWUgPSBpdGVtO1xuICAgICAgICByZXR1cm5EYXRhLnB1c2gocmV0dXJuSXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVybkRhdGE7XG4gIH0sXG5cbiAgLyoqXG4gICAqIOaxguWSjFxuICAgKiBAcGFyYW0gbnVtcyDmlbDnu4RcbiAgICogQHBhcmFtIHByZWNpc2lvbiDnsr7luqZcbiAgICovXG4gIGFkZChudW1zOiBudW1iZXJbXSwgcHJlY2lzaW9uOiBudW1iZXIgPSAyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG51bXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ+WPguaVsOW/hemhu+aYr+aVsOe7hCcpO1xuICAgIH1cbiAgICBpZiAobnVtcy5zb21lKG51bSA9PiB0eXBlb2YgbnVtICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcign5pWw57uE5YWD57Sg5b+F6aG75piv5pWw5a2XJyk7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAoY29uc3QgbnVtIG9mIG51bXMpIHtcbiAgICAgIHJlc3VsdCArPSBudW07XG4gICAgfVxuICAgIHJldHVybiByb3VuZChyZXN1bHQsIHByZWNpc2lvbik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIOWHj+azlVxuICAgKiBAcGFyYW0gbnVtcyDmlbDnu4RcbiAgICogQHBhcmFtIHByZWNpc2lvbiDnsr7luqZcbiAgICovXG4gIHN1YnRyYWN0KG51bXM6IG51bWJlcltdLCBwcmVjaXNpb246IG51bWJlciA9IDIpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobnVtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcign5Y+C5pWw5b+F6aG75piv5pWw57uEJyk7XG4gICAgfVxuICAgIGlmIChudW1zLnNvbWUobnVtID0+IHR5cGVvZiBudW0gIT09ICdudW1iZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCfmlbDnu4TlhYPntKDlv4XpobvmmK/mlbDlrZcnKTtcbiAgICB9XG4gICAgaWYgKG51bXMubGVuZ3RoIDwgMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCflh4/ms5XlhaXlj4LmlbDph4/oh7PlsJHopoEy5Liq77yBJyk7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSBudW1zLnNoaWZ0KCk7XG4gICAgZm9yIChjb25zdCBudW0gb2YgbnVtcykge1xuICAgICAgcmVzdWx0IC09IG51bTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdW5kKHJlc3VsdCwgcHJlY2lzaW9uKTtcbiAgfSxcblxuICAvKipcbiAgICog5LmY5rOVXG4gICAqIEBwYXJhbSBudW1zIOaVsOe7hFxuICAgKiBAcGFyYW0gcHJlY2lzaW9uIOeyvuW6plxuICAgKi9cbiAgbXVsdGlwbHkobnVtczogbnVtYmVyW10sIHByZWNpc2lvbjogbnVtYmVyID0gMikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShudW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCflj4LmlbDlv4XpobvmmK/mlbDnu4QnKTtcbiAgICB9XG4gICAgaWYgKG51bXMuc29tZShudW0gPT4gdHlwZW9mIG51bSAhPT0gJ251bWJlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ+aVsOe7hOWFg+e0oOW/hemhu+aYr+aVsOWtlycpO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gMTtcbiAgICBmb3IgKGNvbnN0IG51bSBvZiBudW1zKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgKiBudW07XG4gICAgfVxuICAgIHJldHVybiByb3VuZChyZXN1bHQsIHByZWNpc2lvbik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIOmZpOazlVxuICAgKiBAcGFyYW0gbnVtcyDmlbDnu4RcbiAgICogQHBhcmFtIHByZWNpc2lvbiDnsr7luqZcbiAgICovXG4gIGRpdmlkZShudW1zOiBudW1iZXJbXSwgcHJlY2lzaW9uOiBudW1iZXIgPSAyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG51bXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ+WPguaVsOW/hemhu+aYr+aVsOe7hCcpO1xuICAgIH1cbiAgICBpZiAobnVtcy5zb21lKG51bSA9PiB0eXBlb2YgbnVtICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcign5pWw57uE5YWD57Sg5b+F6aG75piv5pWw5a2XJyk7XG4gICAgfVxuICAgIGlmIChudW1zLmxlbmd0aCA8IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcign6Zmk5rOV5YWl5Y+C5pWw6YeP6Iez5bCR6KaBMuS4qu+8gScpO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gbnVtcy5zaGlmdCgpO1xuICAgIGZvciAoY29uc3QgbnVtIG9mIG51bXMpIHtcbiAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfpmaTmlbDkuI3og73kuLow77yBJyk7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSByZXN1bHQgLyBudW07XG4gICAgfVxuICAgIHJldHVybiByb3VuZChyZXN1bHQsIHByZWNpc2lvbik7XG4gIH1cbn07XG4iXX0=