@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
85 lines (84 loc) • 3.21 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var _a;
import { get, isArray, isNil, isPlainObject } from 'lodash';
import { EVariableType } from '../constants';
import { splFormatStr } from './utils';
function stringArrTransform(value, option) {
if (value === void 0) { value = []; }
if (option.multi) {
return value;
}
return value[0];
}
var variableValueTransforms = (_a = {},
_a[EVariableType.TIME_INTERVAL] = function (value) {
if (value === void 0) { value = { num: 1, unit: '' }; }
var num = value.num, unit = value.unit;
if (unit === '') {
return '';
}
return num + unit;
},
_a[EVariableType.QUERY_VALUE] = stringArrTransform,
_a[EVariableType.CONSTANTS] = stringArrTransform,
_a[EVariableType.SERVER] = stringArrTransform,
_a);
var hasPrefix = function (variable) {
return !(isNil(variable.prefix) &&
isNil(variable.suffix) &&
isNil(variable.valuePrefix) &&
isNil(variable.valueSuffix) &&
isNil(variable.delimiter));
};
var defaultFormatter = function (value) {
if (isArray(value)) {
return "(" + value.map(splFormatStr).join(',') + ")";
}
else if (typeof value === 'string') {
return splFormatStr(value);
}
return value;
};
export function calcVariableMap(variables) {
return variables.reduce(function (res, variable) {
var type = variable.type, name = variable.name, value = variable.value, option = variable.option;
var transformedValue = variableValueTransforms[type](value, option);
if (hasPrefix(variable)) {
res[name] = __assign(__assign({}, variable), { value: transformedValue });
}
else {
res[name] = transformedValue;
}
return res;
}, {});
}
var regex = /\$(\w+)|\[\[([\s\S]+?)(?::(\w+))?\]\]|\${(\w+)(?::(\w+))?}/g;
export function replaceVariable(target, valueMap) {
return target.replace(regex, function (match, var1, var2, fmt2, var3, fmt3) {
var variableValue = valueMap[var1 || var2 || var3];
var fmt = fmt2 || fmt3 || defaultFormatter;
if (!variableValue) {
return match;
}
if (isPlainObject(variableValue) && hasPrefix(variableValue)) {
var _a = variableValue, option = _a.option, prefix = _a.prefix, valuePrefix_1 = _a.valuePrefix, valueSuffix_1 = _a.valueSuffix, delimiter = _a.delimiter, suffix = _a.suffix, value = _a.value;
// 时间类型的模板变量 option 为undefined
return get(option, 'multi')
? "" + prefix + value
.map(function (val) { return "" + valuePrefix_1 + val + valueSuffix_1; })
.join(delimiter) + suffix
: "" + prefix + value + suffix;
}
return fmt(variableValue);
});
}