import fs from 'fs' import writingStats from 'writing-stats' export const processPostFile = (filePath) => { try { let content = fs.readFileSync(filePath, 'utf8') // remove front matter content = content.replace(/---\n.*?\n---/s, '') // remove empty lines content = content.replace(/^\s*[\r\n]/gm, '') const codeBlockMatches = content.match(/```(.*?)```/gis) const codeBlocks = codeBlockMatches ? codeBlockMatches.length : 0 // remove code blocks content = content.replace(/(```.+?```)/gms, '') const stats = writingStats(content) return { characterCount: stats.characterCount, codeBlockCount: codeBlocks, paragraphCount: stats.paragraphCount, wordCount: stats.wordCount, } } catch (err) { console.error(err) return { characterCount: 0, codeBlockCount: 0, paragraphCount: 0, wordCount: 0, } } } export const makeYearStats = ( currentYear, yearPostCount, yearWordCount, yearCodeBlockCount, avgDays, yearCharacterCount, yearParagraphCount, yearProgress ) => { const daysInYear = (currentYear % 4 === 0 && currentYear % 100 > 0) || currentYear % 400 == 0 ? 366 : 365 return { year: currentYear, daysInYear: daysInYear, postCount: yearPostCount, wordCount: yearWordCount, codeBlockCount: yearCodeBlockCount, avgDays: parseFloat(avgDays.toFixed(2)), avgCharacterCount: parseFloat((yearCharacterCount / yearPostCount).toFixed(2)), avgCodeBlockCount: parseFloat((yearCodeBlockCount / yearPostCount).toFixed(2)), avgParagraphCount: parseFloat((yearParagraphCount / yearPostCount).toFixed(2)), avgWordCount: parseFloat((yearWordCount / yearPostCount).toFixed(2)), yearProgress, } }