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