123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- function capitalize(str) {
- return str.charAt(0).toUpperCase() + str.slice(1)
- }
- function hasSymbols(str) {
- return /[!"#%&'()*+,./:;<=>?@[\\\]^`{|}]/u.exec(str)
- }
- function hasUpper(str) {
- return /[A-Z]/u.exec(str)
- }
- function kebabCase(str) {
- return str
- .replace(/_/gu, '-')
- .replace(/\B([A-Z])/gu, '-$1')
- .toLowerCase()
- }
- function isKebabCase(str) {
- if (
- hasUpper(str) ||
- hasSymbols(str) ||
- /^-/u.exec(str) ||
- /_|--|\s/u.exec(str)
- ) {
- return false
- }
- return true
- }
- function snakeCase(str) {
- return str
- .replace(/\B([A-Z])/gu, '_$1')
- .replace(/-/gu, '_')
- .toLowerCase()
- }
- function isSnakeCase(str) {
- if (hasUpper(str) || hasSymbols(str) || /-|__|\s/u.exec(str)) {
- return false
- }
- return true
- }
- function camelCase(str) {
- if (isPascalCase(str)) {
- return str.charAt(0).toLowerCase() + str.slice(1)
- }
- return str.replace(/[-_](\w)/gu, (_, c) => (c ? c.toUpperCase() : ''))
- }
- function isCamelCase(str) {
- if (
- hasSymbols(str) ||
- /^[A-Z]/u.exec(str) ||
- /-|_|\s/u.exec(str)
- ) {
- return false
- }
- return true
- }
- function pascalCase(str) {
- return capitalize(camelCase(str))
- }
- function isPascalCase(str) {
- if (
- hasSymbols(str) ||
- /^[a-z]/u.exec(str) ||
- /-|_|\s/u.exec(str)
- ) {
- return false
- }
- return true
- }
- const convertersMap = {
- 'kebab-case': kebabCase,
- snake_case: snakeCase,
- camelCase,
- PascalCase: pascalCase
- }
- const checkersMap = {
- 'kebab-case': isKebabCase,
- snake_case: isSnakeCase,
- camelCase: isCamelCase,
- PascalCase: isPascalCase
- }
- function getChecker(name) {
- return checkersMap[name] || isPascalCase
- }
- function getConverter(name) {
- return convertersMap[name] || pascalCase
- }
- module.exports = {
- allowedCaseOptions: ['camelCase', 'kebab-case', 'PascalCase'],
-
- getConverter,
-
- getChecker,
-
- getExactConverter(name) {
- const converter = getConverter(name)
- const checker = getChecker(name)
- return (str) => {
- const result = converter(str)
- return checker(result) ? result : str
- }
- },
- camelCase,
- pascalCase,
- kebabCase,
- snakeCase,
- isCamelCase,
- isPascalCase,
- isKebabCase,
- isSnakeCase,
- capitalize
- }
|