rivo
Version:
🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.
15 lines (12 loc) • 572 B
TypeScript
import type { Args, Fn } from "../HKT";
export type ToSnakeCase<S extends string> =
_ToSnakeCase<S> extends `_${infer T}` ? T : _ToSnakeCase<S>;
type _ToSnakeCase<S extends string, Kebab extends boolean = false> =
S extends `${infer T}-${infer U}` ? `${Lowercase<T>}_${_ToSnakeCase<U, true>}`
: Kebab extends true ? S
: S extends `${infer T}${infer U}` ?
`${T extends Capitalize<T> ? "_" : ""}${Lowercase<T>}${_ToSnakeCase<U>}`
: S;
export default interface ToSnakeCaseFn extends Fn<[string], string> {
def: ([s]: Args<this>) => ToSnakeCase<typeof s>;
}