Spaces:
Sleeping
Sleeping
| import parser from 'postcss-selector-parser' | |
| /** | |
| * @template {string | import('postcss-selector-parser').Root} T | |
| * | |
| * Prefix all classes in the selector with the given prefix | |
| * | |
| * It can take either a string or a selector AST and will return the same type | |
| * | |
| * @param {string} prefix | |
| * @param {T} selector | |
| * @param {boolean} prependNegative | |
| * @returns {T} | |
| */ | |
| export default function (prefix, selector, prependNegative = false) { | |
| if (prefix === '') { | |
| return selector | |
| } | |
| /** @type {import('postcss-selector-parser').Root} */ | |
| let ast = typeof selector === 'string' ? parser().astSync(selector) : selector | |
| ast.walkClasses((classSelector) => { | |
| let baseClass = classSelector.value | |
| let shouldPlaceNegativeBeforePrefix = prependNegative && baseClass.startsWith('-') | |
| classSelector.value = shouldPlaceNegativeBeforePrefix | |
| ? `-${prefix}${baseClass.slice(1)}` | |
| : `${prefix}${baseClass}` | |
| }) | |
| return typeof selector === 'string' ? ast.toString() : ast | |
| } | |