@sequencemedia/css-purge
Version:
A CSS tool written in Node JS as a command line app or library for the purging, burning, reducing, shortening, compressing, cleaning, trimming and formatting of duplicate, extra, excess or bloated CSS.
60 lines (50 loc) • 1.7 kB
JavaScript
import trim from './trim.mjs'
export default function hack (css, OPTIONS, SUMMARY, {
_3tokenValues = [],
_4tokenValues = [],
_5tokenValues = [],
_6tokenValues = [],
_7tokenValues = [],
tokenComments = {}
} = {}) {
// tokens
/// /hacks
/// **/
css = css.replace(/(_1token_hck)/g, '/**/')
/// *\**/
css = css.replace(/(_2token_hck)/g, '/*\\**/')
// (specialchar)property
css = css.replace(/(_3token_hck_([0-9]*): ;)/g, (match) => {
const value = _3tokenValues[match.substring(12, match.length - 3) - 1]
return value + ';'
})
// (;
css = css.replace(/(_4token_hck_)[0-9]*[:][\s]*[;]/g, (match) => {
const value = _4tokenValues[match.substring(12, match.length - 3) - 1]
return value.substring(0, value.length - 2)
})
// [;
css = css.replace(/(_5token_hck_)[0-9]*[:][\s]*[;]/g, (match) => {
const value = _5tokenValues[match.substring(12, match.length - 3) - 1]
return value.substring(0, value.length - 2)
})
// tokens - data:image
css = css.replace(/(_6token_dataimage_)[0-9]*[:][\s]*/g, (match) => {
const value = _6tokenValues[match.substring(18, match.length - 1) - 1]
return value + ';'
})
// tokens - allow multi-keyframe selectors
css = css.replace(/(@keyframes _7token_)[0-9]*[\s]*/g, (match) => {
const value = _7tokenValues[match.substring(19, match.length) - 1]
return trim(value, OPTIONS, SUMMARY)
})
// tokens - replace side comments
Object
.entries(tokenComments)
.forEach(([key, value]) => {
const regExp = new RegExp(`([\\n\\r\\t]*)(\\s*)\\/\\*(${key})\\*\\/`, 'gm')
css = css.replace(regExp, value)
})
// tokens - end of replace side comments
return css
}