UNPKG

rivo

Version:

🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.

15 lines (12 loc) • 572 B
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>; }