siteslimmer
Version:
A tool to optimize built files including HTML, CSS, JS, and fonts.
40 lines (29 loc) • 952 B
JavaScript
import { promises as fs } from 'fs'
import path from 'path'
import { createRequire } from 'module'
const require = createRequire(import.meta.url)
const subsetFont = require('subset-font')
export const subsetFontFile = async (filePath, text) => {
const fontData = await fs.readFile(filePath)
const subsettedFont = await subsetFont(fontData, text, {
formats: [path.extname(filePath).slice(1)],
})
const originalSize = fontData.length
const newSize = subsettedFont.length
let savings = 0
if (newSize < originalSize) {
await fs.writeFile(filePath, subsettedFont)
savings = originalSize - newSize
}
return { originalSize, newSize, savings }
}
export const getUniqueCharactersFromFiles = async (filePaths) => {
let uniqueChars = new Set()
for (const filePath of filePaths) {
const data = await fs.readFile(filePath, 'utf8')
for (const char of data) {
uniqueChars.add(char)
}
}
return Array.from(uniqueChars).join('')
}