DEV Community

Clean Code Studio
Clean Code Studio

Posted on • Edited on

Fluent JavaScript Stringable (Laravel Inspired)

Twitter Follow

Fluent JavaScript Stringable Package

Version Travis PRs Welcome Code Pen Maintenance dependencies
## Project Goals

  • [x] Fluent
  • [x] Stringable
  • [x] Simplified

# Tinkerable Demo


## Laravel JS Str

"Laravel's Illuminate\Str & Illuminate\Stringify Including Str.of() In Javascript"


## Installation

### NPM
npm install --save-dev laravel-js-str 
Enter fullscreen mode Exit fullscreen mode
### Yarn
yarn add laravel-js-str --save 
Enter fullscreen mode Exit fullscreen mode
### CDN
<script src='https://unpkg.com/laravel-js-str@latest/build/index.min.js'></script> 
Enter fullscreen mode Exit fullscreen mode

Str


Documentation For Each String Method Points To Laravel. Javascript examples are below, Laravel docs will specify what each method specifically does. Replace Str::method() with Str.() when using this package

const { Str } = require('laravel-js-str'); let slice = Str.after('This is my name', 'This is'); // ' my name' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slice = Str.afterLast('App\Http\Controllers\Controller', '\\'); // 'Controller' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slice = Str.ascii('û'); // 'u'  
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slice = Str.before('This is my name', 'my name'); // 'This is ' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slice = Str.beforeLast('This is my name', 'is'); // 'This ' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slice = Str.between('This is my name', 'This', 'name'); // ' is my ' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.camel('foo_bar'); // fooBar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let contains = Str.contains('This is my name', 'my'); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let contains = Str.contains('This is my name', ['my', 'foo']); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let containsAll = Str.containsAll('This is my name', ['my', 'name']); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.endsWith('This is my name', 'name'); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.endsWith('This is my name', ['name', 'foo']); // true  result = Str.endsWith('This is my name', ['this', 'foo']); // false 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let adjusted = Str.finish('this/string', '/'); // this/string/  adjusted = Str.finish('this/string/', '/'); // this/string/ 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let matches = Str.is('foo*', 'foobar'); // true  matches = Str.is('baz*', 'foobar'); // false 
Enter fullscreen mode Exit fullscreen mode

isAscii is experimental, not confident it works in all scenarios

const { Str } = require('laravel-js-str'); let isAscii = Str.isAscii('Taylor'); // true  isAscii = Str.isAscii('ü'); // false 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let isUuid = Str.isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de'); // true  isUuid = Str.isUuid('laravel'); // false 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.kebab('fooBar'); // foo-bar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let length = Str.length('Laravel'); // 7 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let truncated = Str.limit('The quick brown fox jumps over the lazy dog', 0); // The quick brown fox... 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let truncated = Str.limit('The quick brown fox jumps over the lazy dog', 0, '(...)'); // The quick brown fox (...) 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.lower('LARAVEL'); // laravel 
Enter fullscreen mode Exit fullscreen mode

Plural Package Used

const { Str } = require('laravel-js-str'); let plural = Str.plural('car'); // cars  plural = Str.plural('child'); // children 
Enter fullscreen mode Exit fullscreen mode

Plural Package Used

const { Str } = require('laravel-js-str'); let plural = Str.plural('child'); // children  plural = Str.plural('child'); // child 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let random = Str.random(40); 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = 'The event will take place between ? and ?'; let replaced = Str.replaceArray(['?', '8:30', '9:00'], string); // The event will take place between 8:30 and 9:00 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let replaced = Str.replaceFirst('the', 'a', 'the quick brown fox jumps over the lazy dog'); // a quick brown fox jumps over the lazy dog 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let replaced = Str.replaceLast('the', 'a', 'the quick brown fox jumps over the lazy dog'); // the quick brown fox jumps over a lazy dog 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let singular = Str.singular('cars'); // car  singular = Str.singular('children'); // child 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slug = Str.slug('Laravel 5 Framework', '-'); // laravel-5-framework 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.snake('fooBar'); // foo_bar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let adjusted = Str.start('this/string', '/'); // /this/string  adjusted = Str.start('/this/string', '/'); // /this/string 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.startsWith('This is my name', This'); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.studly('foo_bar'); // FooBar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.substr('The Laravel Framework', , ); // Laravel 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.title('a nice title uses the correct case'); // A Nice Title Uses The Correct Case 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.ucfirst('foo bar'); // Foo bar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.upper('laravel'); // LARAVEL 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); return Str.uuid(); 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); Str.words('Perfectly balanced, as all things should be.', 3, '>>>'); // Perfectly balanced, as >>> 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slice = Str.of('This is my name').after('This is'); // ' my name' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slice = Str.of('App\Http\Controllers\Controller').afterLast('\\'); // 'Controller' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of('Taylor').append(' Otwell'); // 'Taylor Otwell' 
Enter fullscreen mode Exit fullscreen mode

Experimental Method, not sure this works in all cases

const { Str } = require('laravel-js-str'); let string = Str.of('ü').ascii(); // 'u' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of('/foo/bar/baz').basename(); // 'baz' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of('/foo/bar/baz.jpg').basename('.jpg'); // 'baz' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slice = Str.of('This is my name').before('my name'); // 'This is ' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slice = Str.of('This is my name').beforeLast('is'); // 'This ' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.of('foo_bar').camel(); // fooBar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let contains = Str.of('This is my name').contains('my'); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let contains = Str.of('This is my name').contains(['my', foo']); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let containsAll = Str.of('This is my name').containsAll(['my', 'name']); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of('/foo/bar/baz').dirname(); // '/foo/bar' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of('/foo/bar/baz').dirname(2); // '/foo' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.of('This is my name').endsWith('name'); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.of('This is my name').endsWith(['name', 'foo']); // true  result = Str.of('This is my name').endsWith(['this', 'foo']); // false 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.of('Laravel').exactly('Laravel'); // true 
Enter fullscreen mode Exit fullscreen mode

Collect.js

const { Str } = require('laravel-js-str'); let collection = Str.of('foo bar baz').explode(' '); // collect(['foo', 'bar', 'baz']) 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let adjusted = Str.of('this/string').finish('/'); // this/string/  adjusted = Str.of('this/string/').finish('/'); // this/string/ 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let matches = Str.of('foobar').is('foo*'); // true  matches = Str.of('foobar').is('baz*'); // false 
Enter fullscreen mode Exit fullscreen mode

isAscii is Experimental, not positive its correct in all cases

const { Str } = require('laravel-js-str'); let result = Str.of('Taylor').isAscii(); // true  result = Str.of('ü').isAcii(); // false 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.of(' ').trim().isEmpty(); // true  result = Str.of('Laravel').trim().isEmpty(); // false 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.of(' ').trim().isNotEmpty(); // false  result = Str.of('Laravel').trim().isNotEmpty(); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.of('fooBar').kebab(); // foo-bar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let length = Str.of('Laravel').length(); // 7 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let truncated = Str.of('The quick brown fox jumps over the lazy dog').limit(20); // The quick brown fox... 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let truncated = Str.of('The quick brown fox jumps over the lazy dog').limit(20, ' (...)'); // The quick brown fox (...) 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.of('LARAVEL').lower(); // 'laravel' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of(' Laravel ').ltrim(); // 'Laravel '  string = Str.of('/Laravel/').ltrim('/'); // 'Laravel/' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.of('foo bar').match('/bar/'); // 'bar'  result = Str.of('foo bar').match('/foo (.*)/'); // 'bar' 
Enter fullscreen mode Exit fullscreen mode

Match All Coming Soon

const { Str } = require('laravel-js-str'); let result = Str.of('bar foo bar').matchAll('/bar/'); // collect(['bar', 'bar']) 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.of('bar fun bar fly').matchAll('/f(\w*)/'); // collect(['un', 'ly']); 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let plural = Str.of('car').plural(); // cars  plural = Str.of('child').plural(); // children 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let plural = Str.of('child').plural(2); // children  plural = Str.of('child').plural(1); // child 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of('Framework').prepend('Laravel '); // Laravel Framework 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let replaced = Str.of('Laravel 6.x').replace('6.x', '7.x'); // Laravel 7.x 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = 'The event will take place between ? and ?'; let replaced = Str.of(string).replaceArray('?', ['8:30', '9:00']); // The event will take place between 8:30 and 9:00 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let replaced = Str.of('the quick brown fox jumps over the lazy dog').replaceFirst('the', 'a'); // a quick brown fox jumps over the lazy dog 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let replaced = Str.of('the quick brown fox jumps over the lazy dog').replaceLast('the', 'a'); // the quick brown fox jumps over a lazy dog 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let replaced = Str.of('(+1) 501-555-1000').replace('/[^A-Za-z0-9]++/', ''); //'15015551000' 
Enter fullscreen mode Exit fullscreen mode
 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of(' Laravel ').rtrim(); // ' Laravel'  string = Str.of('/Laravel/').rtrim('/'); // '/Laravel' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let singular = Str.of('cars').singular(); // car  singular = Str.of('children').singular(); // child 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let slug = Str.of('Laravel Framework').slug('-'); // laravel-framework 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.of('fooBar').snake(); // foo_bar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let segments = Str.of('one, two, three').split('/[\s, +/'); // collect(["one", "two", "three"]) 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let adjusted = Str.of('this/string').start('/'); // /this/string  adjusted = Str.of('/this/string').start('/'); // /this/string 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let result = Str.of('This is my name').startsWith('This'); // true 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.of('foo_bar').studly(); // FooBar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of('Laravel Framework').substr(8); // Framework  string = Str.of('Laravel Framework').substr(8, ); // Frame 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let converted = Str.of('a nice title uses the correct case').title(); // A Nice Title Uses The Correct Case 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of(' Laravel ').trim(); // 'Laravel'  string = Str.of('/Laravel/').trim('/'); // 'Laravel' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of('foo bar').ucfirst(); // Foo bar 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let adjusted = Str.of('laravel').upper(); // LARAVEL 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of(' ').whenEmpty(function(string) { return string.trim().prepend('Laravel'); }); // 'Laravel' 
Enter fullscreen mode Exit fullscreen mode
const { Str } = require('laravel-js-str'); let string = Str.of('Perfectly balanced, as all things should be.').words(3, '>>>'); // Perfectly balanced, as >>> 
Enter fullscreen mode Exit fullscreen mode

Playground Examples


Curious, but not 100% on whether this is what you're looking for?

The most powerful method is Str.of('example'), allowing us to fluently chain Str methods together

Example

let { Str } = require('laravel-js-str'); let home = 'https://planets.com'; let title = 'hello mars, a cool world for you to visit, maybe?'; let article = Str.of(title).replaceFirst(',', '') .after('hello') .before('for you') .trim() .start('/') .finish('/') .kebab(); let resource = home + article // resource value:  // 'https://planets.com/mars-a-cool-world/' // // article value: // Stringable: { value: 'https://planets.com/mars-a-cool-world-to-visit', replace, before, after, etc... } // 
Enter fullscreen mode Exit fullscreen mode

Utilization


The most powerful method is Str.of('example'), allowing us to fluently chain Str methods together

Example

let { Str } = require('laravel-js-str'); let home = 'https://planets.com'; let title = 'hello mars, a cool world for you to visit, maybe?'; let article = Str.of(title).replaceFirst(',', '') .after('hello') .before('for you') .trim() .start('/') .finish('/') .kebab(); let resource = home + article // resource value:  // 'https://planets.com/mars-a-cool-world/' // // article value: // Stringable: { value: 'https://planets.com/mars-a-cool-world-to-visit', replace, before, after, etc... } // 
Enter fullscreen mode Exit fullscreen mode

Contribute


PRs are welcomed to this project.
If you want to improve this package, add
functionality or improve the docs please feel free to submit a PR.


Security Vulnerabilities


If you discover a security vulnerability within Clean Code Studio Packages Or Specifically within
laravel-js-str, please send an e-mail to Zachary Horton via zak@cleancode.studio. All security vulnerabilities will be promptly addressed.


Change Log



Release 1.0.0


  • Initial Release

Versioning


Semantic Versioning

Code Status Stage Rule Example Version
First release New Product Start with 1.0.0 1.0.0
Backward compatible bug fixes Patch Release Increment the third digit 1.0.1
Backward compatible new features Minor Release Increment the middle digit and reset last digit to zero 1.1.0
Changes that break backward compatibility Major Release Increment the first digit and reset middle and last digits to zero 2.0.0


License


MIT © Zachary Horton (Clean Code Studio) - Clean Code Studio Packages


Top comments (1)

Collapse
 
cleancodestudio profile image
Clean Code Studio