@ec0lint/plugin-css
Version:
ec0lint plugin that provides rules to verify CSS definition objects
63 lines (62 loc) • 1.87 kB
JavaScript
;
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;