export function handleFormatReportsDatasets (sources, columns) { const labels = [] const datas = [] const dataMap = {} sources.forEach(item => { labels.push(item.date) for (let i in item) { if (i !== 'date') { if (!dataMap[i]) { dataMap[i] = { label: columns[i], data: [] } } dataMap[i].data.push(Number(item[i])) } } }) Object.keys(dataMap).forEach(item => { datas.push(dataMap[item]) }) return { labels, datas } } export function handleFormatReports (content) { let chartStart = '::ProseChart' let tableStart = '::ProseGridTable' let result = '' const reg = /\'/g const replaceStr = ''' // ::ProseChart{type='line' title='langchain-ai/langchain [2023-06-05,2024-06-04] Star Data' :labels='["2023-06-05","2023-06-12"]' :data='[{"label": "star数量", "data": [43071,44946]}]' } content.forEach(item => { let { title, data, format, columns } = item title = title.replace(reg, replaceStr) if (format === 'timeline') { const { labels, datas } = handleFormatReportsDatasets(data, columns) const datasStr = JSON.stringify(datas) const labelsStr = JSON.stringify(labels).replace(reg, replaceStr) result += `${chartStart}{title='${title}' :labels='${labelsStr}' :data='${datasStr}'}` } else if ( format === 'table' ) { const dataStr = JSON.stringify(data).replace(reg, replaceStr) result += `${tableStart}{:data='${dataStr}'}` } }) return result } export function handleFormatWebSource (source) { if ( Array.isArray(source)) return source let sources = [] try { sources = JSON.parse(source) } catch (error) {} return sources } export function gitToLabel(url) { // 使用正则表达式匹配GitHub URL的项目部分 const regex = /https?:\/\/github.com\/[^/]+\/(.+?)\.git/; const match = url.match(regex); // 如果匹配不到,返回空字符串 if (!match) { return ""; } // 返回匹配到的项目名称 return match[1]; } export function handleFormatRepoStars (repoObj, gits) { const card = { type: 'search_relate_repo', title: 'Star对比', ready: true, data: [] } const gitsMap = {} gits.forEach(item => { gitsMap[item.url] = item }) Object.keys(repoObj).forEach(child => { const data = repoObj[child] const cardDataItem = { data: [{ data: [], label: 'Star数量' }], labels: [], info: gitsMap[child] } data.forEach(dataItem => { const { date, stargazers } = dataItem cardDataItem.labels.push(date) cardDataItem.data[0].data.push(stargazers) }) if (cardDataItem.data[0].data.length > 0) { card.data.push(cardDataItem) } }) return card } export function baseGitUrl(gitPath) { const endWidthGit = gitPath.endsWith('.git') return endWidthGit ? gitPath.slice(0, gitPath.length - 4) : gitPath } export function handleFormatSource (source, params) { const {gitPath, branch,repo} = params if (Array.isArray(source)) return source const gitUrl = baseGitUrl(gitPath) return source.split('\n').map((item) => { const isLink = item.indexOf('http') === 0 return { title: repo, url: isLink ? item : `${gitUrl}/blob/${branch}/${item}`, label: item, // todo 后期处理 description: '' } }) } export function handleFormatInfoData (output) { const info = { gits: [], urls: [] } if (!output) { return info } if (typeof output === 'string') { try { info.gits = JSON.parse(output) } catch(error) {} } else { info.gits = output } info.urls = info.gits.map(item => item.url) return info }