/** * Exceptions for PascalCase naming convention. */ const pascalCaseExceptions = ['OAuth2', 'URL', 'API', 'UI', 'ID'] /** * Checks whether a given value is in PascalCase * @param value the value to check * @returns true if the value is in PascalCase */ export function isPascalCaseNoAcronyms(value) { if (value === undefined || value === null || value === '') { return true } return new RegExp( `^(?:[A-Z][a-z0-9]+|${pascalCaseExceptions.join('|')})+[A-Z]?$|^[A-Z]+$`, ).test(value) } /** * Checks whether a given value is in camelCase * @param value the value to check * @returns true if the value is in camelCase */ export function isCamelCaseNoAcronyms(value) { if (value === undefined || value === null || value === '') { return true } return /^[^a-zA-Z0-9]?[a-z][a-z0-9]*([A-Z][a-z0-9]+)*[A-Z]?$/.test(value) } /** * Checks whether a given value is in snake_case * @param value the value to check * @returns true if the value is in snake_case */ export function isSnakeCase(value) { if (value === undefined || value === null || value === '') { return true } return /^([a-z0-9]+_)*[a-z0-9]+$/.test(value) } /** * Checks whether a given value is in kebab-case * @param value the value to check * @returns true if the value is in kebab-case */ export function isKebabCase(value) { if (value === undefined || value === null || value === '') { return true } return /^([a-z0-9]+(-[a-z0-9]+)*)$/.test(value) }