js-convert-case
Version:
JavaScript Convert String and Keys of Object between cases (camelCase, snake_case, PascalCase, dot.case, path/case, text case, Sentence case, Header Case, UPPERCASE, lowercase, kebab-case). Use for both Node.JS and Browser
819 lines (653 loc) • 20.9 kB
Markdown
[![NPM version][npm-image]][npm-url]
[![NPM downloads][downloads-image]][downloads-url]
[](https://GitHub.com/huynhsamha/js-convert-case/tags)

[](https://lbesson.mit-license.org/)
[]: https://img.shields.io/npm/v/js-convert-case.svg?style=flat
[]: https://www.npmjs.com/package/js-convert-case
[]: https://img.shields.io/npm/dm/js-convert-case.svg?style=flat
[]: https://www.npmjs.com/package/js-convert-case
⛹️♂️ JavaScript Convert Cases Package 🏌️♀️ Use for both Node.JS and Browser 🎯🎯
Convert String and Keys of Object between cases (camelCase, snake_case, PascalCase, dot.case, path/case, text case, Sentence case, Header Case, UPPERCASE, lowercase, kebab-case).
<!-- <br>
<img src="https://github.com/huynhsamha/js-convert-case/raw/master/docs/img/banner.png" width="50%" justify="center">
<br> -->
View [Demo on GitHub here](https://huynhsamha.github.io/js-convert-case/).
```bash
npm install --save js-convert-case
yarn add js-convert-case
```
Download file `js-convert-case.min.js` at [here](https://github.com/huynhsamha/js-convert-case/blob/master/dist/js-convert-case.min.js) or we can use CDN for NPM such as [unpkg](https://unpkg.com/) or [jsDelivr](https://www.jsdelivr.com/).
```html
<!-- Use CDN -->
<!-- use jsDelivr -->
<script src="https://cdn.jsdelivr.net/js-convert-case/dist/js-convert-case.min.js"></script>
<!-- or use unpkg -->
<script src="https://unpkg.com/js-convert-case/dist/js-convert-case.min.js"></script>
<!-- or download file directly -->
<script src="[path/to/dist]/js-convert-case.min.js"></script>
```
```js
const jsConvert = require('js-convert-case');
// or
const { toCamelCase, toDotCase, upperKeys, snakeKeys } = require('js-convert-case');
```
```js
import js-convert-case from 'js-convert-case';
// or
import { toPascalCase, toPathCase, lowerKeys, camelKeys } from 'js-convert-case';
```
```js
// Convert String
console.log(jsConvert.toCamelCase('param-case')); // paramCase
console.log(jsConvert.toSnakeCase('param-case')); // param_case
console.log(jsConvert.toPascalCase('param-case')); // ParamCase
console.log(jsConvert.toDotCase('param-case')); // param.case
console.log(jsConvert.toPathCase('param-case')); // param/case
console.log(jsConvert.toTextCase('param-case')); // param case
console.log(jsConvert.toSentenceCase('param-case')); // Param case
console.log(jsConvert.toHeaderCase('param-case')); // Param Case
console.log(jsConvert.toLowerCase('param-case')); // param-case
console.log(jsConvert.toUpperCase('param-case')); // PARAM-CASE
console.log(jsConvert.toKebabCase('param-case')); // param-case
// Convert Keys of Object
const obj = {
camelCase: 1,
UPPERCASE: 2,
lowercase: 3,
snake_case: 4,
PascalCase: 5,
'Title Case': 6,
'dot.case': 7,
'param-case': 8,
'Sentence case': 9,
'path/case': 10,
'Header-Case': 11
};
console.log(jsConvert.lowerKeys(obj));
console.log(jsConvert.upperKeys(obj));
console.log(jsConvert.camelKeys(obj));
console.log(jsConvert.snakeKeys(obj));
console.log(jsConvert.pascalKeys(obj));
console.log(jsConvert.kebabKeys(obj));
```
After file `js-convert-case.min.js` is loaded, object `jsConvert` will be exported globally into `window` object.
```html
<script>
console.log(window.jsConvert);
console.log(jsConvert);
// Convert String cases
console.log(jsConvert.toCamelCase('param-case')); // paramCase
console.log(jsConvert.toSnakeCase('param-case')); // param_case
console.log(jsConvert.toPascalCase('param-case')); // ParamCase
console.log(jsConvert.toDotCase('param-case')); // param.case
console.log(jsConvert.toPathCase('param-case')); // param/case
console.log(jsConvert.toTextCase('param-case')); // param case
console.log(jsConvert.toSentenceCase('param-case')); // Param case
console.log(jsConvert.toHeaderCase('param-case')); // Param Case
console.log(jsConvert.toLowerCase('param-case')); // param-case
console.log(jsConvert.toUpperCase('param-case')); // PARAM-CASE
console.log(jsConvert.toKebabCase('param-case')); // param-case
// Convert Keys of Object case
const obj = {
camelCase: 1,
UPPERCASE: 2,
lowercase: 3,
snake_case: 4,
PascalCase: 5,
'Title Case': 6,
'dot.case': 7,
'param-case': 8,
'Sentence case': 9,
'path/case': 10,
'Header-Case': 11
};
console.log(jsConvert.lowerKeys(obj));
console.log(jsConvert.upperKeys(obj));
console.log(jsConvert.camelKeys(obj));
console.log(jsConvert.snakeKeys(obj));
console.log(jsConvert.pascalKeys(obj));
console.log(jsConvert.kebabKeys(obj));
</script>
```
You can see more examples in directory [`./test/browser`](./test/browser)
**jsConvert** is an object containing function which converts cases. On browser, `jsConvert` is exported globally to `window` object, you can access by `jsConvert` or `window.jsConvert`.
- [`toCamelCase`](
- [`toSnakeCase`](
- [`toPascalCase`](
- [`toDotCase`](
- [`toPathCase`](
- [`toTextCase`](
- [`toSentenceCase`](
- [`toHeaderCase`](
- [`toKebabCase`](
- [`toLowerCase`](
- [`toUpperCase`](
- [`lowerKeys`](
- [`upperKeys`](
- [`camelKeys`](
- [`snakeKeys`](
- [`pascalKeys`](
- [`kebabKeys`](
Return as a string with the separators denoted by having the next letter capitalized.
```js
console.log(jsConvert.toCamelCase('param-case')); // paramCase
```
Return as a lower case, underscore separated string.
```js
console.log(jsConvert.toSnakeCase('camelCase')); // camel_case
```
Return as a string denoted in the same fashion as `camelCase`, but with the first letter also capitalized.
```js
console.log(jsConvert.toPascalCase('param-case')); // ParamCase
```
Return as a lower case, period separated string.
```js
console.log(jsConvert.toDotCase('Title Case')); // title.case
```
Return as a lower case, slash separated string.
```js
console.log(jsConvert.toPathCase('camelCase')); // camel/case
```
Return the string without any casing (lower case, space separated).
```js
console.log(jsConvert.toTextCase('camelCase')); // camel case
```
Return as a lower case, space separated string with the first letter upper case.
```js
console.log(jsConvert.toSentenceCase('camelCase')); // Camel case
```
Return as a space separated string with the first character of every word upper cased.
```js
console.log(jsConvert.toHeaderCase('param-case')); // Param Case
```
Return as a lower case, hyphen separated string.
```js
console.log(jsConvert.toKebabCase('Title Case')); // title-case
```
Similar to `String.prototype.toLowerCase()`
```js
console.log(jsConvert.toLowerCase('Title Case')); // title case
```
Similar to `String.prototype.toUpperCase()`
```js
console.log(jsConvert.toUpperCase('param-case')); // PARAM-CASE
```
```ts
const lowerKeys(obj: any, {
recursive: boolean = false,
recursiveInArray: boolean = false,
keepTypesOnRecursion: any[] = [] // example: Date
}): object | null
```
Return a new object which keys is _lowercase_ format. Support lowerKeys **recursively**. Default is `false`.
```js
console.log(jsConvert.lowerKeys(obj));
// or recursive
console.log(jsConvert.lowerKeys(obj, { recursive: true }));
// or recursive in sub-keys with value is an array
console.log(jsConvert.lowerKeys(obj, { recursive: true, recursiveInArray: true }));
/**
{ camelcase: 1,
uppercase: 2,
lowercase: 3,
snake_case: 4,
pascalcase: 5,
'title case': 6,
'dot.case': 7,
'param-case': 8,
'sentence case': 9,
'path/case': 10,
'header-case': 11 }
**/
// All output are `null`
console.log(jsConvert.lowerKeys(undefined));
console.log(jsConvert.lowerKeys(null));
console.log(jsConvert.lowerKeys(1));
console.log(jsConvert.lowerKeys('abc'));
console.log(jsConvert.lowerKeys([1, 2, 3]));
```
```ts
const upperKeys(obj: any, {
recursive: boolean = false,
recursiveInArray: boolean = false,
keepTypesOnRecursion: any[] = [] // example: Date
}): object | null
```
Return a new object which keys is _UPPERCASE_ format. Support upperKeys **recursively**. Default is `false`
```js
console.log(jsConvert.upperKeys(obj));
// or recursive
console.log(jsConvert.upperKeys(obj, { recursive: true }));
// or recursive in sub-keys with value is an array
console.log(jsConvert.upperKeys(obj, { recursive: true, recursiveInArray: true }));
/**
{ CAMELCASE: 1,
UPPERCASE: 2,
LOWERCASE: 3,
SNAKE_CASE: 4,
PASCALCASE: 5,
'TITLE CASE': 6,
'DOT.CASE': 7,
'PARAM-CASE': 8,
'SENTENCE CASE': 9,
'PATH/CASE': 10,
'HEADER-CASE': 11 }
**/
// All output are `null`
console.log(jsConvert.upperKeys(undefined));
console.log(jsConvert.upperKeys(null));
console.log(jsConvert.upperKeys(1));
console.log(jsConvert.upperKeys('abc'));
console.log(jsConvert.upperKeys([1, 2, 3]));
```
```ts
const camelKeys(obj: any, {
recursive: boolean = false,
recursiveInArray: boolean = false,
keepTypesOnRecursion: any[] = [] // example: Date
}): object | null
```
Return a new object which keys is _camelCase_ format. Support camelKeys **recursively**. Default is `false`.
```js
console.log(jsConvert.camelKeys(obj));
// or recursive
console.log(jsConvert.camelKeys(obj, { recursive: true }));
// or recursive in sub-keys with value is an array
console.log(jsConvert.camelKeys(obj, { recursive: true, recursiveInArray: true }));
/**
{ camelCase: 1,
uppercase: 2,
lowercase: 3,
snakeCase: 4,
pascalCase: 5,
titleCase: 6,
dotCase: 7,
paramCase: 8,
sentenceCase: 9,
pathCase: 10,
headerCase: 11 }
**/
// All output are `null`
console.log(jsConvert.camelKeys(undefined));
console.log(jsConvert.camelKeys(null));
console.log(jsConvert.camelKeys(1));
console.log(jsConvert.camelKeys('abc'));
console.log(jsConvert.camelKeys([1, 2, 3]));
```
```ts
const snakeKeys(obj: any, {
recursive: boolean = false,
recursiveInArray: boolean = false,
keepTypesOnRecursion: any[] = [] // example: Date
}): object | null
```
Return a new object which keys is _snake_case_ format. Support snakeKeys **recursively**. Default is `false`.
```js
console.log(jsConvert.snakeKeys(obj));
// or recursive
console.log(jsConvert.snakeKeys(obj, { recursive: true }));
// or recursive in sub-keys with value is an array
console.log(jsConvert.snakeKeys(obj, { recursive: true, recursiveInArray: true }));
/**
{ camel_case: 1,
uppercase: 2,
lowercase: 3,
snake_case: 4,
pascal_case: 5,
title_case: 6,
dot_case: 7,
param_case: 8,
sentence_case: 9,
path_case: 10,
header_case: 11 }
**/
// All output are `null`
console.log(jsConvert.snakeKeys(undefined));
console.log(jsConvert.snakeKeys(null));
console.log(jsConvert.snakeKeys(1));
console.log(jsConvert.snakeKeys('abc'));
console.log(jsConvert.snakeKeys([1, 2, 3]));
```
```ts
const pascalKeys(obj: any, {
recursive: boolean = false,
recursiveInArray: boolean = false,
keepTypesOnRecursion: any[] = [] // example: Date
}): object | null
```
Return a new object which keys is _PascalCase_ format. Support pascalKeys **recursively**. Default is `false`.
```js
console.log(jsConvert.pascalKeys(obj));
// or recursive
console.log(jsConvert.pascalKeys(obj, { recursive: true }));
// or recursive in sub-keys with value is an array
console.log(jsConvert.pascalKeys(obj, { recursive: true, recursiveInArray: true }));
/**
{ CamelCase: 1,
Uppercase: 2,
Lowercase: 3,
SnakeCase: 4,
PascalCase: 5,
TitleCase: 6,
DotCase: 7,
ParamCase: 8,
SentenceCase: 9,
PathCase: 10,
HeaderCase: 11 }
**/
// All output are `null`
console.log(jsConvert.pascalKeys(undefined));
console.log(jsConvert.pascalKeys(null));
console.log(jsConvert.pascalKeys(1));
console.log(jsConvert.pascalKeys('abc'));
console.log(jsConvert.pascalKeys([1, 2, 3]));
```
```ts
const kebabKeys(obj: any, {
recursive: boolean = false,
recursiveInArray: boolean = false,
keepTypesOnRecursion: any[] = [] // example: Date
}): object | null
```
Return a new object which keys is _kebab-case_ format. Support kebabKeys **recursively**. Default is `false`.
```js
console.log(jsConvert.kebabKeys(obj));
// or recursive
console.log(jsConvert.kebabKeys(obj, { recursive: true }));
// or recursive in sub-keys with value is an array
console.log(jsConvert.kebabKeys(obj, { recursive: true, recursiveInArray: true }));
/**
{ 'camel-case': 1,
uppercase: 2,
lowercase: 3,
'snake-case': 4,
'pascal-case': 5,
'title-case': 6,
'dot-case': 7,
'param-case': 8,
'sentence-case': 9,
'path-case': 10,
'header-case': 11 }
**/
// All output are `null`
console.log(jsConvert.kebabKeys(undefined));
console.log(jsConvert.kebabKeys(null));
console.log(jsConvert.kebabKeys(1));
console.log(jsConvert.kebabKeys('abc'));
console.log(jsConvert.kebabKeys([1, 2, 3]));
```
```js
console.log(jsConvert.toCamelCase('param-case')); // paramCase
console.log(jsConvert.toCamelCase('camelCase')); // camelCase
console.log(jsConvert.toCamelCase('Title Case')); // titleCase
console.log(jsConvert.toSnakeCase('param-case')); // param_case
console.log(jsConvert.toSnakeCase('camelCase')); // camel_case
console.log(jsConvert.toSnakeCase('Title Case')); // title_case
console.log(jsConvert.toPascalCase('param-case')); // ParamCase
console.log(jsConvert.toPascalCase('camelCase')); // CamelCase
console.log(jsConvert.toPascalCase('Title Case')); // TitleCase
console.log(jsConvert.toDotCase('param-case')); // param.case
console.log(jsConvert.toDotCase('camelCase')); // camel.case
console.log(jsConvert.toDotCase('Title Case')); // title.case
console.log(jsConvert.toPathCase('param-case')); // param/case
console.log(jsConvert.toPathCase('camelCase')); // camel/case
console.log(jsConvert.toPathCase('Title Case')); // title/case
console.log(jsConvert.toTextCase('param-case')); // param case
console.log(jsConvert.toTextCase('camelCase')); // camel case
console.log(jsConvert.toTextCase('Title Case')); // title case
console.log(jsConvert.toSentenceCase('param-case')); // Param case
console.log(jsConvert.toSentenceCase('camelCase')); // Camel case
console.log(jsConvert.toSentenceCase('Title Case')); // Title case
console.log(jsConvert.toHeaderCase('param-case')); // Param Case
console.log(jsConvert.toHeaderCase('camelCase')); // Camel Case
console.log(jsConvert.toHeaderCase('Title Case')); // Title Case
console.log(jsConvert.toLowerCase('param-case')); // param-case
console.log(jsConvert.toLowerCase('Title Case')); // title case
console.log(jsConvert.toUpperCase('param-case')); // PARAM-CASE
console.log(jsConvert.toUpperCase('Title Case')); // TITLE CASE
console.log(jsConvert.toKebabCase('param-case')); // param-case
console.log(jsConvert.toKebabCase('Title Case')); // title-case
console.log(jsConvert.toKebabCase('param-case')); // PARAM-CASE
console.log(jsConvert.toKebabCase('Title Case')); // TITLE-CASE
```
```js
console.log(jsConvert.toCamelCase('')); // => ''
console.log(jsConvert.toSnakeCase(null)); // => ''
console.log(jsConvert.toPascalCase(undefined)); // => ''
```
```js
const str =
'!@#$ -- Hello___world ..<>| \\ 123_ _456 &l sn_ca - cmCa - PcCa - dot.ca - txt ca - Sen ca - Hd Ca %^$^%&';
console.log(jsConvert.toCamelCase(str)); // => 'helloWorld123456LSnCaCmCaPcCaDotCaTxtCaSenCaHdCa'
console.log(jsConvert.toPascalCase(str)); // => 'HelloWorld123456LSnCaCmCaPcCaDotCaTxtCaSenCaHdCa'
console.log(jsConvert.toSnakeCase(str)); // => 'hello_world_123_456_l_sn_ca_cm_ca_pc_ca_dot_ca_txt_ca_sen_ca_hd_ca'
console.log(jsConvert.toDotCase(str)); // => 'hello.world.123.456.l.sn.ca.cm.ca.pc.ca.dot.ca.txt.ca.sen.ca.hd.ca'
console.log(jsConvert.toPathCase(str)); // => 'hello/world/123/456/l/sn/ca/cm/ca/pc/ca/dot/ca/txt/ca/sen/ca/hd/ca'
console.log(jsConvert.toTextCase(str)); // => 'hello world 123 456 l sn ca cm ca pc ca dot ca txt ca sen ca hd ca'
console.log(jsConvert.toSentenceCase(str)); // => 'Hello world 123 456 l sn ca cm ca pc ca dot ca txt ca sen ca hd ca'
console.log(jsConvert.toHeaderCase(str)); // => 'Hello World 123 456 L Sn Ca Cm Ca Pc Ca Dot Ca Txt Ca Sen Ca Hd Ca'
console.log(jsConvert.toKebabCase(str)); // => 'hello-world-123-456-l-sn-ca-cm-ca-pc-ca-dot-ca-txt-ca-sen-ca-hd-ca'
```
**Multi-leveled object**
```js
const core = {
camelCase: 1,
UPPERCASE: 2,
lowercase: 3,
snake_case: 4,
PascalCase: 5,
'Title Case': 6,
'dot.case': 7,
'param-case': 8,
'Sentence case': 9,
'path/case': 10,
'Header-Case': 11
};
const obj = {
...core,
lv1: {
...core,
lv2: {
...core
}
}
};
```
**Example with `upperKeys`**
```js
const res = jsConvert.upperKeys(obj, { recursive: true });
console.log(JSON.stringify(res));
```
Output
```json
{
"CAMELCASE": 1,
"UPPERCASE": 2,
"LOWERCASE": 3,
"SNAKE_CASE": 4,
"PASCALCASE": 5,
"TITLE CASE": 6,
"DOT.CASE": 7,
"PARAM-CASE": 8,
"SENTENCE CASE": 9,
"PATH/CASE": 10,
"HEADER-CASE": 11,
"LV1": {
"CAMELCASE": 1,
"UPPERCASE": 2,
"LOWERCASE": 3,
"SNAKE_CASE": 4,
"PASCALCASE": 5,
"TITLE CASE": 6,
"DOT.CASE": 7,
"PARAM-CASE": 8,
"SENTENCE CASE": 9,
"PATH/CASE": 10,
"HEADER-CASE": 11,
"LV2": {
"CAMELCASE": 1,
"UPPERCASE": 2,
"LOWERCASE": 3,
"SNAKE_CASE": 4,
"PASCALCASE": 5,
"TITLE CASE": 6,
"DOT.CASE": 7,
"PARAM-CASE": 8,
"SENTENCE CASE": 9,
"PATH/CASE": 10,
"HEADER-CASE": 11
}
}
}
```
**Example with `pascalKeys`**
```js
const res = jsConvert.pascalKeys(obj, { recursive: true });
console.log(JSON.stringify(res));
```
Output
```json
{
"CamelCase": 1,
"Uppercase": 2,
"Lowercase": 3,
"SnakeCase": 4,
"PascalCase": 5,
"TitleCase": 6,
"DotCase": 7,
"ParamCase": 8,
"SentenceCase": 9,
"PathCase": 10,
"HeaderCase": 11,
"Lv1": {
"CamelCase": 1,
"Uppercase": 2,
"Lowercase": 3,
"SnakeCase": 4,
"PascalCase": 5,
"TitleCase": 6,
"DotCase": 7,
"ParamCase": 8,
"SentenceCase": 9,
"PathCase": 10,
"HeaderCase": 11,
"Lv2": {
"CamelCase": 1,
"Uppercase": 2,
"Lowercase": 3,
"SnakeCase": 4,
"PascalCase": 5,
"TitleCase": 6,
"DotCase": 7,
"ParamCase": 8,
"SentenceCase": 9,
"PathCase": 10,
"HeaderCase": 11
}
}
}
```
**Example with `snakeKeys` use recursive in array-sub-keys**
```js
const obj = {
camelCase: 1,
PascalCase: {
camelCase: [1, 'a', null, { PascalCase: 1 }, undefined],
PascalCase: [{ PascalCase: [1] }, [1, { PascalCase: 2 }]],
snake_case: { camelCase: [{ PascalCase: 1 }] }
}
};
const res = jsConvert.snakeKeys(obj, { recursive: true, recursiveInArray: true });
console.log(JSON.stringify(res));
```
Output
```json
{
"camel_case": 1,
"pascal_case": {
"camel_case": [1, "a", null, { "pascal_case": 1 }, null],
"pascal_case": [{ "pascal_case": [1] }, [1, { "pascal_case": 2 }]],
"snake_case": { "camel_case": [{ "pascal_case": 1 }] }
}
}
```
_Note: You can browse more examples at folder [`./test/example`](./test/example)_.
No dependencies
- Clone the repository and enter the project
```bash
git clone https://github.com/huynhsamha/js-convert-case.git
cd js-convert-case
```
- Install dependencies
```bash
yarn
```
- Lint and format source (directory `src`)
```bash
yarn format # defined in package.json
yarn lint # defined in package.json
```
- Build package for Node
```bash
yarn dist:node # defined in package.json
```
Output directory is `dist` (defined in file `tsconfig.json`)
- Build package for Browser
```bash
yarn dist:browser # defined in package.json and rollup.config.js
```
- Build dist (both Node and Browser)
```bash
yarn dist # defined in package.json
```
- Build release files
```bash
yarn build:release:binary
```
### Testing
In directory `test`, we can test the package in environments NodeJS, Browser, pre-published NPM package and the released package.
## Buy me a coffee
<a href="https://www.paypal.me/harisk305/5" target="_blank"><img src="https://i.imgur.com/4bN8fdy.jpg" alt="Donate to my paypal" width=120></a>