@alicloud/cloud-charts
Version:

105 lines (101 loc) • 6.28 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.calcChartScore = calcChartScore;
exports.postMessageForChartsInfo = postMessageForChartsInfo;
var _constants = require("../constants");
var _chartQuality = _interopRequireDefault(require("./chartQuality"));
// Teamix.test对接
// 跨源通信
// 图表库首次载入(理论仅发送一次
window.postMessage({
source: "teamix-test-devtools",
url: window.location.href,
event: "getModuleInfo",
moduleType: 'ApsaraStack',
moduleName: "@alicloud/cloud-charts",
// 图表库依赖名称
moduleVersion: _constants.VERSION,
// 图表库依赖版本
componentName: _constants.FullCamelName // 图表库通用组件名,没有可不填
}, "*");
function postMessageForChartsInfo(resultData, event, url) {
// message会被结构化克隆算法序列化
// 只能传递普通对象,对于error和function等无法传递,所以会导致克隆出错
// 这里由于统计了配置项,而配置项会包含函数function所以导致报错
// 问题链接:https://stackoverflow.com/questions/52122011/failed-to-execute-postmessage-on-window-googletagmanager/52223341#52223341
var message = {
source: 'teamix-test-devtools',
moduleType: 'ApsaraStack',
url: url || window.location.href,
event: event || "getChartTestInfo",
moduleName: "@alicloud/cloud-charts",
moduleVersion: _constants.VERSION,
resultData: resultData
};
window.postMessage(JSON.parse(JSON.stringify(message)));
}
// 初始图表质量分数统计
// 汇总计算分数
// 初始为10分,根据错误率和权重扣分,最终每个图表取平均值
function calcChartScore(logMap) {
var _logMap$Wcontainer$in, _logMap$Wcontainer;
var score = 10;
// 错误分数
var errorScore = 0;
// 图表数量, Wcontainer算在内
var chartNumber = 0;
// test后期会用
var errorInfoArray = [];
// 统计config使用
var configInfoArray = [];
// 统计图表性能(渲染时间)
var renderTimeArray = [];
Object.keys(logMap).forEach(function (chartName) {
var _logMap$chartName$ini, _logMap$chartName, _logMap$chartName$rul, _logMap$chartName2, _logMap$chartName3, _logMap$chartName3$co, _logMap$chartName4, _logMap$chartName5, _logMap$chartName5$re, _logMap$chartName6, _logMap$chartName7;
// console.log(logMap);
chartNumber += (_logMap$chartName$ini = logMap[chartName].init) !== null && _logMap$chartName$ini !== void 0 ? _logMap$chartName$ini : 0;
// 错误信息汇总
((_logMap$chartName = logMap[chartName]) === null || _logMap$chartName === void 0 ? void 0 : (_logMap$chartName$rul = _logMap$chartName.rulesInfo) === null || _logMap$chartName$rul === void 0 ? void 0 : _logMap$chartName$rul.length) !== 0 && errorInfoArray.push((_logMap$chartName2 = logMap[chartName]) === null || _logMap$chartName2 === void 0 ? void 0 : _logMap$chartName2.rulesInfo);
((_logMap$chartName3 = logMap[chartName]) === null || _logMap$chartName3 === void 0 ? void 0 : (_logMap$chartName3$co = _logMap$chartName3.configInfo) === null || _logMap$chartName3$co === void 0 ? void 0 : _logMap$chartName3$co.length) !== 0 && configInfoArray.push((_logMap$chartName4 = logMap[chartName]) === null || _logMap$chartName4 === void 0 ? void 0 : _logMap$chartName4.configInfo);
((_logMap$chartName5 = logMap[chartName]) === null || _logMap$chartName5 === void 0 ? void 0 : (_logMap$chartName5$re = _logMap$chartName5.renderTimeArray) === null || _logMap$chartName5$re === void 0 ? void 0 : _logMap$chartName5$re.length) !== 0 && renderTimeArray.push((_logMap$chartName6 = logMap[chartName]) === null || _logMap$chartName6 === void 0 ? void 0 : _logMap$chartName6.renderTimeArray);
(_logMap$chartName7 = logMap[chartName]) === null || _logMap$chartName7 === void 0 ? void 0 : _logMap$chartName7.rulesInfo.forEach(function (subInfo) {
var _chartQuality$subInfo, _ruleInfo$weight, _subInfo$errorInfo$er, _subInfo$errorInfo;
var ruleInfo = (_chartQuality$subInfo = _chartQuality["default"][subInfo.checkItem]) !== null && _chartQuality$subInfo !== void 0 ? _chartQuality$subInfo : {};
// 错误分 = 权重 * 错误率, 0 为没错
errorScore += numberDecimal(((_ruleInfo$weight = ruleInfo === null || ruleInfo === void 0 ? void 0 : ruleInfo.weight) !== null && _ruleInfo$weight !== void 0 ? _ruleInfo$weight : 0) * ((_subInfo$errorInfo$er = (_subInfo$errorInfo = subInfo.errorInfo) === null || _subInfo$errorInfo === void 0 ? void 0 : _subInfo$errorInfo.errorRate) !== null && _subInfo$errorInfo$er !== void 0 ? _subInfo$errorInfo$er : 0));
});
// 容器单独计算
if (chartName === 'Wcontainer') {
var _logMap$chartName$ini2, _logMap$chartName8;
// 错误分 = 权重 * 使用容器组件的次数
errorScore += numberDecimal(_chartQuality["default"].Container.weight * ((_logMap$chartName$ini2 = (_logMap$chartName8 = logMap[chartName]) === null || _logMap$chartName8 === void 0 ? void 0 : _logMap$chartName8.init) !== null && _logMap$chartName$ini2 !== void 0 ? _logMap$chartName$ini2 : 0));
}
});
// 计算平均分
var avgErrorScore = chartNumber === 0 ? 0 : numberDecimal(errorScore / chartNumber);
// 计算总得分
return {
rate: numberDecimal(score - avgErrorScore),
errorInfo: errorInfoArray,
configIngo: configInfoArray,
renderInfo: renderTimeArray,
chartInfo: {
// 图表数量(去除废弃组件)
chartRealSum: chartNumber - ((_logMap$Wcontainer$in = (_logMap$Wcontainer = logMap.Wcontainer) === null || _logMap$Wcontainer === void 0 ? void 0 : _logMap$Wcontainer.init) !== null && _logMap$Wcontainer$in !== void 0 ? _logMap$Wcontainer$in : 0),
// 图表数量(包含废弃组件)
chartSum: chartNumber,
logMap: logMap
}
};
}
// 解决循环依赖的问题,原先这个工具函数在common内,就会导致以下情况
// index -> theme -> log -> postMessage -> common -> log
function numberDecimal(num, decimal) {
if (decimal === void 0) {
decimal = 2;
}
// 小数位被转换为整数且不小于0
var d = Math.max(0, Math.round(decimal));
return Math.round(Number(num) * Math.pow(10, d)) / Math.pow(10, d);
}