npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lucky-case

v1.1.8

Published

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

Downloads

1,865

Readme

lucky-case

Gem GitHub release (latest by date) Gem License: MIT

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.

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

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

Approach 1: Using the static class

// node js
const LuckyCase = require('lucky-case');
// browser
<script type="text/javascript" src="js/lib/lucky-case.min.js"></script>

// 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.

// node js
const LuckyCase = require('lucky-case/string');
// browser
<script type="text/javascript" src="js/lib/lucky-case.string.min.js"></script>

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:

yarn add lucky-case

Option 2: node js npm

In your project root directory execute the following command:

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 and put it in an appropriate folder of your project, e.g. js/lib and reference it with an script tag in your project:

<script type="text/javascript" src="js/lib/lucky-case.min.js"></script>

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:

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 code of conduct.