import {CamelCase} from "type-fest"; export function toPascalCase(str: string): string { return ( str // Split on non-word characters, underscores, spaces, or boundaries between a lower-case letter and an upper-case letter, or a number and a letter .split(/\W|_|\s+|(?<=[a-z])(?=[A-Z])|(?<=[0-9])(?=[A-Za-z])/) // Capitalize the first letter of each word and join them together .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) .join("") ); } export function toCamelCase(str: string): CamelCase { return ( str // Split on non-word characters, underscores, spaces, or boundaries between a lower-case letter and an upper-case letter, or a number and a letter .split(/\W|_|\s+|(?<=[a-z])(?=[A-Z])|(?<=[0-9])(?=[A-Za-z])/) // Capitalize the first letter of each word and join them together .map((word, index) => (index == 0 ? word.charAt(0).toLowerCase() : word.charAt(0).toUpperCase()) + word.slice(1).toLowerCase()) .join("") ); } export type Clean = T extends undefined ? {} : T export type ValueUnion = Required; export function typedObjectKeys(object: O): (keyof O)[] { return Object.keys(object) as (keyof O)[] } export function typedObjectEntries(object: O): [keyof O, O[keyof O]][] { return Object.entries(object) as [keyof O, O[keyof O]][] }