declare function toCamelCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toCobolCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toConstantCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toDotCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toFlatCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toKebabCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toLowerCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toMacroCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toPascalCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toPathCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toSentenceCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toSnakeCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toSpongeCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toSwapCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toTitleCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toTrainCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

declare function toUpperCase(input: string, options?: {
    preserveWhitespace?: boolean;
    preserveSpecialCharacters?: boolean;
}): string;

type CasingFunction = (str: string) => string;
type TransformOptions = {
    transformKeys?: boolean;
    transformValues?: boolean;
};
interface CustomTransformOptions {
    separator?: string | RegExp;
    preserveSpecialCharacters?: boolean;
    preserveWhitespace?: boolean;
    outputSeparator?: string;
}

declare function transformObjectCasing<T>(input: T, casingFunction: CasingFunction, options?: TransformOptions): T;
declare function customTransform(input: string, transformer: (word: string, index: number) => string, options?: CustomTransformOptions): string;

export { type CasingFunction, type CustomTransformOptions, type TransformOptions, customTransform, toCamelCase, toCobolCase, toConstantCase, toDotCase, toFlatCase, toKebabCase, toLowerCase, toMacroCase, toPascalCase, toPathCase, toSentenceCase, toSnakeCase, toSpongeCase, toSwapCase, toTitleCase, toTrainCase, toUpperCase, transformObjectCasing };
