JSPM

  • Created
  • Published
  • Downloads 903081
  • Score
    100M100P100Q192196F
  • License MIT

camelCase, kebab-case, PascalCase... a simple integration with nano package size. (SMALL footprint!)

Package Exports

  • case-anything

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (case-anything) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Case anything 🐫

npm i case-anything

camelCase, kebab-case, PascalCase... a simple integration with nano package size. (SMALL footprint!)

Motivation

I created this package because most other packages that do simple case changing are so big...

I wanted to try my hand at the smallest iteration possible.

Meet the family

Usage

case-anything supports tree-shaking and is side-effect free!

import { camelCase, pascalCase, kebabCase, snakeCase, constantCase } from 'case-anything'

const testString = 'PonytaVaporeon_poliwrath-BUTTERFREE'
// or any variant on this

camelCase(testString) === 'ponytaVaporeonPoliwrathButterfree'

pascalCase(testString) === 'PonytaVaporeonPoliwrathButterfree'

kebabCase(testString) === 'ponyta-vaporeon-poliwrath-butterfree'

snakeCase(testString) === 'ponyta_vaporeon_poliwrath_butterfree'

constantCase(testString) === 'PONYTA_VAPOREON_POLIWRATH_BUTTERFREE'

There is also spaceCase and pathCase, which does not convert the casing:

import { spaceCase, pathCase } from 'case-anything'

const testString = 'PonytaVaporeon_poliwrath-BUTTERFREE'

spaceCase(testString) === 'Ponyta Vaporeon poliwrath BUTTERFREE'

pathCase(testString) === 'Ponyta/Vaporeon/poliwrath/BUTTERFREE'

There is also upper, lower and capital case. These will all convert the casing & also add spaces in between:

import { upperCase, lowerCase, capitalCase } from 'case-anything'

const testString = 'PonytaVaporeon_poliwrath-BUTTERFREE'

upperCase(testString) === 'PONYTA VAPOREON POLIWRATH BUTTERFREE'
lowerCase(testString) === 'ponyta vaporeon poliwrath butterfree'
capitalCase(testString) === 'Ponyta Vaporeon Poliwrath Butterfree'

When spaces are involved

As soon as there is a space in the target string, it will regard the input as a "sentence" and only split each part at the spaces.

See this example to understand each case:

const testString = "listen I'm O.K.!"

// splits on spaces & removes special characters
camelCase(listenImOK) ===    'listenImOk'
pascalCase(listenImOK) ===   'ListenImOk'
kebabCase(listenImOK) ===    'listen-im-ok'
snakeCase(listenImOK) ===    'listen_im_ok'
constantCase(listenImOK) === 'LISTEN_IM_OK'

// splits on spaces & keeps special characters
spaceCase(listenImOK) ===    "listen I'm O.K.!"
pathCase(listenImOK) ===     "listen/I'm/O.K.!"
lowerCase(listenImOK) ===    "listen i'm o.k.!"
upperCase(listenImOK) ===    "LISTEN I'M O.K.!"
capitalCase(listenImOK) ===  "Listen I'm O.k.!"

Also note, that multiple sequential spaces are treated as one space.

When special alphabet is involved

Currently what keeps the package small is the fact that I use a simple regex to find all the parts in a string:

  • /^[a-z]+|[A-Z][a-z]+|[a-z]+|[0-9]+|[A-Z]+(?![a-z])/g

That means that alphabet letters like Γ©, Γ§, ΓΌ, Δ« and many others aren't compatible.

If there is a simple way to include these via unicode ranges in the regex, please feel free to open a PR or issue!

Package size

We'll compare this package with blakeembrey/change-case, a very famous package on npm.

case-anything change-case
camelCase 1.1K (572) 27.2K (6K)
pascalCase 1.1K (561) 27.4K (6.1K)
kebabCase 1.1K (541) 26.8K (5.9K)
snakeCase 1.1K (540) 26.8K (5.9K)
constantCase 1.1K (540) 27.2K (6K)
pathCase 1K (530) 26.8K (5.9K)

Source code

What keeps my package small, is that it's literally just a regex:

export function splitOnSpecialChars (string: string): any[] {
  return string.match(/^[a-z]+|[A-Z][a-z]+|[a-z]+|[0-9]+|[A-Z]+(?![a-z])/g)
}