diff --git a/package.json b/package.json index 294e23c..dbe7d03 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ztimson/utils", - "version": "0.23.19", + "version": "0.23.20", "description": "Utility library", "author": "Zak Timson", "license": "MIT", diff --git a/src/string.ts b/src/string.ts index bffd510..4c20420 100644 --- a/src/string.ts +++ b/src/string.ts @@ -19,12 +19,10 @@ export const SYMBOL_LIST = '~`!@#$%^&*()_-+={[}]|\\:;"\'<,>.?/'; export const CHAR_LIST = LETTER_LIST + LETTER_LIST.toLowerCase() + NUMBER_LIST + SYMBOL_LIST; /** - * Converts text to camel case + * Converts text to camelCase */ -export function camelCase(text?: string) { - if(!text) return ''; - text = text.replaceAll(/^[0-9]+/g, '') - .replaceAll(/[^a-zA-Z0-9]+(\w?)/g, (...args) => args[1]?.toUpperCase() || ''); +export function camelCase(str?: string) { + const text = pascalCase(str); return text[0].toLowerCase() + text.slice(1); } @@ -74,6 +72,17 @@ export function insertAt(target: string, str: string, index: number): String { return `${target.slice(0, index)}${str}${target.slice(index + 1)}`; } +/** + * Converts text to kebab-case + */ +export function kebabCase(str: string) { + if(!str) return ''; + return str.replaceAll(/(^[^a-zA-Z]+|[^a-zA-Z0-9-_])/g, '') + .replaceAll(/([A-Z]|[0-9]+)/g, (...args) => `-${args[0].toLowerCase()}`) + .replaceAll(/([0-9])([a-z])/g, (...args) => `${args[1]}-${args[2]}`) + .replaceAll(/[^a-z0-9]+(\w?)/g, (...args) => `-${args[1] ?? ''}`).toLowerCase(); +} + /** * Add padding to string * @@ -96,6 +105,18 @@ export function pad(text: any, length: number, char: string = ' ', start = true) return text.toString().padEnd(length, char); } +/** + * Convert text to PascalCase + * @param {string} str + * @return {string} + */ +export function pascalCase(str?: string) { + if(!str) return ''; + const text = str.replaceAll(/(^[^a-zA-Z]+|[^a-zA-Z0-9-_])/g, '') + .replaceAll(/[^a-zA-Z0-9]+(\w?)/g, (...args) => args[1]?.toUpperCase() || ''); + return text[0].toUpperCase() + text.slice(1); +} + /** * Generate a random hexadecimal value * @@ -159,6 +180,17 @@ export function randomStringBuilder(length: number, letters = false, numbers = f }).join(''); } +/** + * Converts text to snake_case + */ +export function snakeCase(str?: string) { + if(!str) return ''; + return str.replaceAll(/(^[^a-zA-Z]+|[^a-zA-Z0-9-_])/g, '') + .replaceAll(/([A-Z]|[0-9]+)/g, (...args) => `_${args[0].toLowerCase()}`) + .replaceAll(/([0-9])([a-z])/g, (...args) => `${args[1]}_${args[2]}`) + .replaceAll(/[^a-z0-9]+(\w?)/g, (...args) => `_${args[1] ?? ''}`).toLowerCase(); +} + /** * Splice a string together (Similar to Array.splice) *