UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

210 lines (209 loc) 6.64 kB
import { checkDate } from "./checkDate.js"; import { calculateClsAverage, calculateClsScoreText, calculateInpAverage, calculateInpScoreText, calculateLcpAverage, calculateLcpScoreText } from "./webVitalsUtils.js"; const buildPerPageRouteDataObject = (webVitalData) => { const RouteArray = []; const last24HoursData = []; const last7DaysData = []; const last30DaysData = []; for (const item of webVitalData) { const { route, timestamp } = item; if (checkDate(timestamp).isInLast24Hours()) { const index2 = last24HoursData.findIndex((entry) => entry.route === route); if (index2 !== -1) { last24HoursData[index2].samplesize += 1; if (item.name === "CLS") { last24HoursData[index2].clsvalue.push(item.value); } if (item.name === "LCP") { last24HoursData[index2].lcpvalue.push(item.value); } if (item.name === "INP") { last24HoursData[index2].inpvalue.push(item.value); } } else { last24HoursData.push({ route, samplesize: 1, clsvalue: item.name === "CLS" ? [item.value] : [], lcpvalue: item.name === "LCP" ? [item.value] : [], inpvalue: item.name === "INP" ? [item.value] : [] }); } } if (checkDate(timestamp).isInLast7Days()) { const index2 = last7DaysData.findIndex((entry) => entry.route === route); if (index2 !== -1) { last7DaysData[index2].samplesize += 1; if (item.name === "CLS") { last7DaysData[index2].clsvalue.push(item.value); } if (item.name === "LCP") { last7DaysData[index2].lcpvalue.push(item.value); } if (item.name === "INP") { last7DaysData[index2].inpvalue.push(item.value); } } else { last7DaysData.push({ route, samplesize: 1, clsvalue: item.name === "CLS" ? [item.value] : [], lcpvalue: item.name === "LCP" ? [item.value] : [], inpvalue: item.name === "INP" ? [item.value] : [] }); } } if (checkDate(timestamp).isInLast30Days()) { const index2 = last30DaysData.findIndex((entry) => entry.route === route); if (index2 !== -1) { last30DaysData[index2].samplesize += 1; if (item.name === "CLS") { last30DaysData[index2].clsvalue.push(item.value); } if (item.name === "LCP") { last30DaysData[index2].lcpvalue.push(item.value); } if (item.name === "INP") { last30DaysData[index2].inpvalue.push(item.value); } } else { last30DaysData.push({ route, samplesize: 1, clsvalue: item.name === "CLS" ? [item.value] : [], lcpvalue: item.name === "LCP" ? [item.value] : [], inpvalue: item.name === "INP" ? [item.value] : [] }); } } const index = RouteArray.findIndex((entry) => entry.route === route); if (index !== -1) { RouteArray[index].samplesize += 1; if (item.name === "CLS") { RouteArray[index].clsvalue.push(item.value); } if (item.name === "LCP") { RouteArray[index].lcpvalue.push(item.value); } if (item.name === "INP") { RouteArray[index].inpvalue.push(item.value); } } else { RouteArray.push({ route, samplesize: 1, clsvalue: item.name === "CLS" ? [item.value] : [], lcpvalue: item.name === "LCP" ? [item.value] : [], inpvalue: item.name === "INP" ? [item.value] : [] }); } } const perPageData = []; const last24HoursPerPageData = []; const last7DaysPerPageData = []; const last30DaysPerPageData = []; for (const item of RouteArray) { const { route, samplesize, clsvalue, lcpvalue, inpvalue } = item; const clsAverage = calculateClsAverage(clsvalue); const lcpAverage = calculateLcpAverage(lcpvalue); const inpAverage = calculateInpAverage(inpvalue); perPageData.push({ pageRoute: route, sampleSize: samplesize, CLS: { average: clsAverage, rating: calculateClsScoreText(clsAverage) }, LCP: { average: lcpAverage, rating: calculateLcpScoreText(lcpAverage) }, INP: { average: inpAverage, rating: calculateInpScoreText(inpAverage) } }); } for (const item of last24HoursData) { const { route, samplesize, clsvalue, lcpvalue, inpvalue } = item; const clsAverage = calculateClsAverage(clsvalue); const lcpAverage = calculateLcpAverage(lcpvalue); const inpAverage = calculateInpAverage(inpvalue); last24HoursPerPageData.push({ pageRoute: route, sampleSize: samplesize, CLS: { average: clsAverage, rating: calculateClsScoreText(clsAverage) }, LCP: { average: lcpAverage, rating: calculateLcpScoreText(lcpAverage) }, INP: { average: inpAverage, rating: calculateInpScoreText(inpAverage) } }); } for (const item of last7DaysData) { const { route, samplesize, clsvalue, lcpvalue, inpvalue } = item; const clsAverage = calculateClsAverage(clsvalue); const lcpAverage = calculateLcpAverage(lcpvalue); const inpAverage = calculateInpAverage(inpvalue); last7DaysPerPageData.push({ pageRoute: route, sampleSize: samplesize, CLS: { average: clsAverage, rating: calculateClsScoreText(clsAverage) }, LCP: { average: lcpAverage, rating: calculateLcpScoreText(lcpAverage) }, INP: { average: inpAverage, rating: calculateInpScoreText(inpAverage) } }); } for (const item of last30DaysData) { const { route, samplesize, clsvalue, lcpvalue, inpvalue } = item; const clsAverage = calculateClsAverage(clsvalue); const lcpAverage = calculateLcpAverage(lcpvalue); const inpAverage = calculateInpAverage(inpvalue); last30DaysPerPageData.push({ pageRoute: route, sampleSize: samplesize, CLS: { average: clsAverage, rating: calculateClsScoreText(clsAverage) }, LCP: { average: lcpAverage, rating: calculateLcpScoreText(lcpAverage) }, INP: { average: inpAverage, rating: calculateInpScoreText(inpAverage) } }); } return { historicalData: perPageData, last24HoursData: last24HoursPerPageData, last7DaysData: last7DaysPerPageData, last30DaysData: last30DaysPerPageData }; }; export { buildPerPageRouteDataObject };