frontend/.pnpm-store/v3/files/75/7544c33a6421133fd2f414da297d46afcf129d77dc1bbb154e674e3149bd83c0cb7747f87639ee69b4f89de9a8476b97bd97e9d0c2ef9de7a597dd18a24f10

33 lines
894 B
Plaintext

import {SplitIncludingDelimiters} from './delimiter-case';
import {SnakeCase} from './snake-case';
import {Includes} from './includes';
/**
Returns a boolean for whether the string is screaming snake case.
*/
type IsScreamingSnakeCase<Value extends string> = Value extends Uppercase<Value>
? Includes<SplitIncludingDelimiters<Lowercase<Value>, '_'>, '_'> extends true
? true
: false
: false;
/**
Convert a string literal to screaming-snake-case.
This can be useful when, for example, converting a camel-cased object property to a screaming-snake-cased SQL column name.
@example
```
import {ScreamingSnakeCase} from 'type-fest';
const someVariable: ScreamingSnakeCase<'fooBar'> = 'FOO_BAR';
```
@category Template Literals
*/
export type ScreamingSnakeCase<Value> = Value extends string
? IsScreamingSnakeCase<Value> extends true
? Value
: Uppercase<SnakeCase<Value>>
: Value;