# Change Case
> Transform a string between `camelCase`, `PascalCase`, `Capital Case`, `snake_case`, `kebab-case`, `CONSTANT_CASE` and others.
## Installation
```
npm install change-case --save
```
## Usage
```js
import * as changeCase from "change-case";
changeCase.camelCase("TEST_VALUE"); //=> "testValue"
```
Included case functions:
| Method | Result |
| ----------------- | ----------- |
| `camelCase` | `twoWords` |
| `capitalCase` | `Two Words` |
| `constantCase` | `TWO_WORDS` |
| `dotCase` | `two.words` |
| `kebabCase` | `two-words` |
| `noCase` | `two words` |
| `pascalCase` | `TwoWords` |
| `pascalSnakeCase` | `Two_Words` |
| `pathCase` | `two/words` |
| `sentenceCase` | `Two words` |
| `snakeCase` | `two_words` |
| `trainCase` | `Two-Words` |
All methods accept an `options` object as the second argument:
- `delimiter?: string` The character to use between words. Default depends on method, e.g. `_` in snake case.
- `locale?: string[] | string | false` Lower/upper according to specified locale, defaults to host environment. Set to `false` to disable.
- `split?: (value: string) => string[]` A function to define how the input is split into words. Defaults to `split`.
- `prefixCharacters?: string` Retain at the beginning of the string. Defaults to `""`. Example: use `"_"` to keep the underscores in `__typename`.
- `suffixCharacters?: string` Retain at the end of the string. Defaults to `""`. Example: use `"_"` to keep the underscore in `type_`.
By default, `pascalCase` and `snakeCase` separate ambiguous characters with `_`. For example, `V1.2` would become `V1_2` instead of `V12`. If you prefer them merged you can set `mergeAmbiguousCharacters` to `true`.
### Split
**Change case** exports a `split` utility which can be used to build other case functions. It accepts a string and returns each "word" as an array. For example:
```js
split("fooBar")
.map((x) => x.toLowerCase())
.join("_"); //=> "foo_bar"
```
## Change Case Keys
```js
import * as changeKeys from "change-case/keys";
changeKeys.camelCase({ TEST_KEY: true }); //=> { testKey: true }
```
**Change case keys** wraps around the core methods to transform object keys to any case.
### API
- **input: any** Any JavaScript value.
- **depth: number** Specify the depth to transfer for case transformation. Defaults to `1`.
- **options: object** Same as base case library.
## TypeScript and ESM
This package is a [pure ESM package](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) and ships with TypeScript definitions. It cannot be `require`'d or used with CommonJS module resolution in TypeScript.
## License
MIT