An open API service indexing awesome lists of open source software.

https://github.com/magynhard/lucky-case

The lucky javascript library to identify and convert strings from any letter case to another
https://github.com/magynhard/lucky-case

capitalize case convert-strings converter dash-case javascript letter-case lower-case node-js npm-module npm-package pascal-case recognizer snake-case string-transformations transformer upper-case utf-8

Last synced: about 2 months ago
JSON representation

The lucky javascript library to identify and convert strings from any letter case to another

Awesome Lists containing this project

README

        

# lucky-case
[![npm package](https://img.shields.io/npm/v/lucky-case?color=default&style=plastic&logo=npm&logoColor=red)](https://www.npmjs.com/package/lucky-case)
[![GitHub release (latest by date)](https://img.shields.io/github/v/release/magynhard/lucky-case?color=default&label=browser&logo=javascript&style=plastic)](https://github.com/magynhard/lucky-case/releases)
![downloads](https://img.shields.io/npm/dt/lucky-case?color=blue&style=plastic)
[![License: MIT](https://img.shields.io/badge/License-MIT-gold.svg?style=plastic&logo=mit)](LICENSE)

> The lucky javascript library to identify and convert strings from any letter case to another. Plus some extra functions.

It's a port of my ruby gem [lucky_case](https://github.com/magynhard/lucky_case).

Useful when working with conventions, where class names, method names and file names needs to be converted.

* Converters: Only characters, numbers, dashes and underlines are allowed inside a string.
* Must not start with dash or number, underlines at the beginning are allowed by default and can be allowed/removed/controlled by parameter (when used for private methods for example)

### Support for UTF-8 / Unicode
As JavaScript has no unicode regular expression support like Ruby, UTF-8/Unicode-Ranges for non-latin letters have been included,
to ensure proper case detection.

This functionality has not been extensively tested and is therefore experimental in nature.

# Contents

* [Usage](#usage)
* [Installation](#installation)
* [Documentation](#documentation)
* [Contributing](#contributing)


## Usage

You can either use the static LuckyCase class with its method or optionally monkey patch the String class.

### Approach 1: Using the static class
```javascript
// node js
const LuckyCase = require('lucky-case');
// browser

// converters
LuckyCase.toSnakeCase('PascalToSnake') // => 'pascal_to_snake'
LuckyCase.toUpperSnakeCase('Train-To-Upper-Snake') // => 'TRAIN_TO_UPPER_SNAKE'
LuckyCase.toPascalCase('snake_to_pascal') // => 'SnakeToPascal'
LuckyCase.toCamelCase('dash-to-camel-case') // => 'dashToCamelCase'
LuckyCase.toDashCase('PascalToDashCase') // => 'pascal-to-dash-case'
LuckyCase.toUpperDashCase('PascalToUpperDash') // => 'PASCAL-TO-UPPER-DASH'
LuckyCase.toTrainCase('snake_to_train_case') // => 'Snake-To-Train-Case'
LuckyCase.toWordCase('PascalToWordCase') // => 'pascal to word case'
LuckyCase.toUpperWordCase('PascalToUpperWord') // => 'PASCAL TO UPPER WORD'
LuckyCase.toCapitalWordCase('snake_to_capital_word') // => 'Snake To Capital Word'
LuckyCase.toSentenceCase('snake_to_sentence_case') // => 'Snake to sentence case'
LuckyCase.toMixedCase('example_snake_string') // => 'Example-snake_STRING'

// converter by type
LuckyCase.convertCase('some_snake', 'PASCAL_CASE') // => 'SomeSnake'

// transformers
LuckyCase.toLowerCase('Some_FuckingShit') // => 'some_fuckingshit'
LuckyCase.toUpperCase('Some_FuckingShit') // => 'SOME_FUCKINGSHIT'
LuckyCase.toCapital('example') // => 'Example'
LuckyCase.capitalize('exAmple') // => 'ExAmple'
LuckyCase.decapitalize('ExAmple') // => 'exAmple'
LuckyCase.swapCase('SomeSwappy_Case-Example') // => 'sOMEsWAPPY-cASE_eXAMPLE'
LuckyCase.constantize('some_constant') // => SomeConstant
LuckyCase.constantize('SOME_CONSTANT') // => SomeConstant
LuckyCase.constantize('some/path_example/folder') // => SomePathExampleFolder
LuckyCase.deconstantize(SomeConstant) // => 'someConstant' // default caseType: 'CAMEL_CASE'
LuckyCase.deconstantize(SomeConstant, caseType: 'SNAKE_CASE') // => 'some_constant'

// identifiers
LuckyCase.case('this_can_only_be_snake_case') // => 'SNAKE_CASE'
LuckyCase.cases('validformultiple') // => [ 'SNAKE_CASE', 'CAMEL_CASE', 'DASH_CASE', 'WORD_CASE' ]

// checkers
LuckyCase.isSnakeCase('valid_snake_case') // => true
LuckyCase.isUpperSnakeCase('UPPER_SNAKE') // => true
LuckyCase.isPascalCase('PascalCase') // => true
LuckyCase.isCamelCase('toCamelCase') // => true
LuckyCase.isDashCase('dash-case') // => true
LuckyCase.isUpperDashCase('DASH-CASE') // => true
LuckyCase.isTrainCase('Train-Case') // => true
LuckyCase.isWordCase('word case') // => true
LuckyCase.isUpperWordCase('UPPER WORD CASE') // => true
LuckyCase.isCapitalWordCase('Capital Word Case') // => true
LuckyCase.isSentenceCase('Sentence case string') // => true
LuckyCase.isMixedCase('mixed_Case') // => true
LuckyCase.isUpperCase('UPPER50984') // => true
LuckyCase.isLowerCase('lower_cheese') // => true
LuckyCase.isCapital('Some') // => true
LuckyCase.isCapitalized('some') // => false
LuckyCase.isNotCapital('soMe') // => true
LuckyCase.isDecapitalized('somE') // => true
LuckyCase.isValidCaseType('SNAKE_CASE') // => true
LuckyCase.isValidCaseType('APPLE_CASE') // => false
LuckyCase.isValidCaseString('validString') // => true
LuckyCase.isValidCaseString('1nV4lid$tring') // => false
```

### Approach 2: Monkey patch the string class

With monkey patching you can access the same methods (except `deconstantize`, `isValidCaseType`) of LuckyCase directly from strings.

Because the methods `case` and `cases` are so general and could lead to conflicts, they are called `letterCase` and `letterCases` at strings.

```javascript
// node js
const LuckyCase = require('lucky-case/string');
// browser

let a = 'ExampleString'

a.isPascalCase() // => true
a.toSnakeCase() // => 'example_string'
a // => 'ExampleString'

// identifiers
// got a other method name here because 'case' might be to common and cause conflicts
b = 'example'
b.letterCase() // => 'SNAKE_CASE'
b.letterCases() // => [ 'SNAKE_CASE', 'CAMEL_CASE', 'DASH_CASE', 'WORD_CASE' ]
```


## Installation

### Option 1: node js yarn

In your project root directory execute the following command:
```bash
yarn add lucky-case
```

### Option 2: node js npm

In your project root directory execute the following command:
```bash
npm install lucky-case
```

### Option 3: Browser

Download the latest `lucky-case.min.js` or `lucky-case.string.min.js` (string monkey patching version) from the [release page](https://github.com/magynhard/lucky-case/releases) and
put it in an appropriate folder of your project, e.g. `js/lib`
and reference it with an script tag in your project:
```html

```

Optionally you then should add the source file to your build pipeline, if you are using webpack, brunch or any other packager.



## Documentation
Check out the *jsdoc* documentations:
* [LuckyCase static class version](doc/lucky-case.jsdoc.md)
* [LuckyCase string monkey patched version](doc/lucky-case-string.jsdoc.md)


## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/magynhard/lucky-case. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.