prefixSelector.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. Object.defineProperty(exports, /**
  6. * @template {string | import('postcss-selector-parser').Root} T
  7. *
  8. * Prefix all classes in the selector with the given prefix
  9. *
  10. * It can take either a string or a selector AST and will return the same type
  11. *
  12. * @param {string} prefix
  13. * @param {T} selector
  14. * @param {boolean} prependNegative
  15. * @returns {T}
  16. */ "default", {
  17. enumerable: true,
  18. get: ()=>_default
  19. });
  20. const _postcssSelectorParser = /*#__PURE__*/ _interopRequireDefault(require("postcss-selector-parser"));
  21. function _interopRequireDefault(obj) {
  22. return obj && obj.__esModule ? obj : {
  23. default: obj
  24. };
  25. }
  26. function _default(prefix, selector, prependNegative = false) {
  27. if (prefix === "") {
  28. return selector;
  29. }
  30. let ast = typeof selector === "string" ? (0, _postcssSelectorParser.default)().astSync(selector) : selector;
  31. ast.walkClasses((classSelector)=>{
  32. let baseClass = classSelector.value;
  33. let shouldPlaceNegativeBeforePrefix = prependNegative && baseClass.startsWith("-");
  34. classSelector.value = shouldPlaceNegativeBeforePrefix ? `-${prefix}${baseClass.slice(1)}` : `${prefix}${baseClass}`;
  35. });
  36. return typeof selector === "string" ? ast.toString() : ast;
  37. }