UNPKG

@ec0lint/plugin-css

Version:

ec0lint plugin that provides rules to verify CSS definition objects

63 lines (62 loc) 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getExactConverter = exports.getConverter = exports.getChecker = exports.isCamelCase = exports.camelCase = exports.isKebabCase = exports.kebabCase = void 0; function hasSymbols(str) { return /[!"#%&'()*+,./:;<=>?@[\\\]^`{|}]/u.exec(str); } function hasUpper(str) { return /[A-Z]/u.exec(str); } function kebabCase(str) { return str .replace(/\B(?<c>[A-Z])/gu, "-$<c>") .toLowerCase() .replace(/^(?<vender>apple|moz|ms|o|wap|webkit)-/u, "-$<vender>-"); } exports.kebabCase = kebabCase; function isKebabCase(str) { if (hasUpper(str) || hasSymbols(str) || /_|--|\s/u.test(str)) { return false; } return true; } exports.isKebabCase = isKebabCase; function camelCase(str) { return str .replace(/-(?<c>\w)/gu, (_, c) => (c ? c.toUpperCase() : "")) .replace(/^Ms[A-Z]/u, (ms) => `m${ms.slice(1)}`); } exports.camelCase = camelCase; function isCamelCase(str) { if (hasSymbols(str) || /[\s\-_]/u.test(str)) { return false; } return true; } exports.isCamelCase = isCamelCase; const convertersMap = { "kebab-case": kebabCase, camelCase, }; const checkersMap = { "kebab-case": isKebabCase, camelCase: isCamelCase, }; function getChecker(name) { return checkersMap[name] || isCamelCase; } exports.getChecker = getChecker; function getConverter(name) { return convertersMap[name] || camelCase; } exports.getConverter = getConverter; function getExactConverter(name) { const converter = getConverter(name); const checker = getChecker(name); return (str) => { const result = converter(str); return checker(result) ? result : str; }; } exports.getExactConverter = getExactConverter;