purgetss
Version:
A package that simplifies mobile app creation for Titanium developers.
93 lines (76 loc) • 2.77 kB
JavaScript
/**
* PurgeTSS v7.1 - FontAwesome Builder (Development)
*
* Builds FontAwesome TSS files for development/distribution.
* COPIED from lib/build-fontawesome-free-tss.js - NO CHANGES to logic.
*
* Generates: ./dist/fontawesome.tss
*
* @since 7.1.0 (refactored from lib/)
* @author César Estrada
*/
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
import _ from 'lodash'
import css from 'css'
import { logger } from '../../../shared/logger.js'
import { extractUnicodeValue } from '../../../shared/utils.js'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const projectRoot = path.resolve(__dirname, '../../../../')
// Ensure dist directory exists
if (!fs.existsSync(path.resolve(projectRoot, './dist'))) {
fs.mkdirSync(path.resolve(projectRoot, './dist'))
}
/**
* Main builder function
* COPIED exactly from original constructor() function
*/
export function buildFontAwesome() {
const cssContent = fs.readFileSync(path.resolve(projectRoot, './node_modules/@fortawesome/fontawesome-free/css/all.css'), 'utf8')
const data = css.parse(cssContent)
let tssClasses = fs.readFileSync(path.resolve(projectRoot, './lib/templates/fontawesome/free-template.tss'), 'utf8') + '\n'
tssClasses += fs.readFileSync(path.resolve(projectRoot, './lib/templates/fontawesome/free-reset.tss'), 'utf8')
tssClasses += processCSS(data)
fs.writeFileSync(path.resolve(projectRoot, './dist/fontawesome.tss'), tssClasses, _err => {
throw _err
})
logger.file('./dist/fontawesome.tss')
}
/**
* Process CSS data to TSS format
* UPDATED for FontAwesome 7 - handles CSS custom properties (--fa:)
*
* @param {Object} data - CSS data from readCSS
* @returns {string} Processed TSS classes
*/
export function processCSS(data) {
const rules = _.map(data.stylesheet.rules, rule => {
if (rule.type === 'rule' && rule.selectors && rule.declarations && rule.declarations.length > 0) {
// Look for --fa CSS custom property
const faDeclaration = rule.declarations.find(decl => decl.property === '--fa')
if (faDeclaration && faDeclaration.value) {
const selector = rule.selectors[0].replace('::before', '').replace(':before', '')
const unicodeValue = extractUnicodeValue(faDeclaration.value)
if (unicodeValue) {
return {
selector: selector,
property: unicodeValue
}
}
}
}
})
let paraTSS = ''
_.each(rules, rule => {
if (rule) {
paraTSS += `'${rule.selector}': { text: '\\u${rule.property}', title: '\\u${rule.property}' }\n`
}
})
return paraTSS
}
// Execute if run directly
if (import.meta.url === `file://${process.argv[1]}`) {
buildFontAwesome()
}