UNPKG

doiuse

Version:

Lint CSS for browser support against caniuse database

43 lines (38 loc) 1.26 kB
import { checkSelector } from '../../utils/util.js'; const ATTRIBUTE_IDENTIFIER = '[^\\~|^$*\\]]*'; // Export for testing export const REGEXES = { 'HAS_ATTRIBUTE': new RegExp(`\\[${ATTRIBUTE_IDENTIFIER}\\]`), 'MATCH_ATTRIBUTE': new RegExp(`\\[${ATTRIBUTE_IDENTIFIER}=${ATTRIBUTE_IDENTIFIER}\\]`), 'WORD_ATTRIBUTE': new RegExp(`\\[${ATTRIBUTE_IDENTIFIER}\\~=${ATTRIBUTE_IDENTIFIER}\\]`), 'SUBCODE_ATTRIBUTE': new RegExp(`\\[${ATTRIBUTE_IDENTIFIER}\\|=${ATTRIBUTE_IDENTIFIER}\\]`), 'BRACKET_PARENS': /(\[[^=\]]*(=("[^"]*")|[^\]]+|)])|(\([^)]*\))/g, }; /** * @param {RegExp} pattern * @return {(str:string) => boolean} */ function matchOutsideOfBrackets(pattern) { if (!(pattern instanceof RegExp)) { throw new TypeError('matchOutsideOfBrackets expects a RegExp'); } return (string) => pattern.test(string.replaceAll(REGEXES.BRACKET_PARENS, '')); } export default checkSelector([ ':first-child', ':link', ':visited', ':active', ':hover', ':focus', ':lang', REGEXES.HAS_ATTRIBUTE, REGEXES.MATCH_ATTRIBUTE, REGEXES.WORD_ATTRIBUTE, REGEXES.SUBCODE_ATTRIBUTE, matchOutsideOfBrackets(/\*/), matchOutsideOfBrackets(/>/), matchOutsideOfBrackets(/\+/), matchOutsideOfBrackets(/\./), matchOutsideOfBrackets(/#/), ]);