UNPKG

@alicloud/cloud-charts

Version:

![](https://img.shields.io/npm/v/@alicloud/cloud-charts?color=%23ff8200)

100 lines (96 loc) 5.99 kB
import { VERSION, FullCamelName } from '../constants'; import chartQuality from './chartQuality'; // Teamix.test对接 // 跨源通信 // 图表库首次载入(理论仅发送一次 window.postMessage({ source: "teamix-test-devtools", url: window.location.href, event: "getModuleInfo", moduleType: 'ApsaraStack', moduleName: "@alicloud/cloud-charts", // 图表库依赖名称 moduleVersion: VERSION, // 图表库依赖版本 componentName: FullCamelName // 图表库通用组件名,没有可不填 }, "*"); export 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: VERSION, resultData: resultData }; window.postMessage(JSON.parse(JSON.stringify(message))); } // 初始图表质量分数统计 // 汇总计算分数 // 初始为10分,根据错误率和权重扣分,最终每个图表取平均值 export 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[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.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); }