flooent
Version:
Fluent interface to provide an expressive syntax for common manipulations.
128 lines (127 loc) • 3.64 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.slug = exports.capitalize = exports.camel = exports.studly = exports.snake = exports.kebab = exports.title = exports.limit = exports.startWith = exports.endWith = exports.prepend = exports.append = exports.unwrap = exports.wrap = exports.beforeLast = exports.before = exports.afterLast = exports.after = void 0;
const utils_1 = require("./utils");
function after(value, part) {
const index = value.indexOf(part);
if (index === -1) {
return value;
}
return value.slice(index + part.length);
}
exports.after = after;
function afterLast(value, part) {
const index = value.lastIndexOf(part);
if (index === -1) {
return value;
}
return value.slice(index + part.length);
}
exports.afterLast = afterLast;
function before(value, part) {
const index = value.indexOf(part);
if (index === -1) {
return value;
}
return value.slice(0, index);
}
exports.before = before;
function beforeLast(value, part) {
const index = value.lastIndexOf(part);
if (index === -1) {
return value;
}
return value.slice(0, index);
}
exports.beforeLast = beforeLast;
/**
* Wraps a string with the given value.
*/
function wrap(value, start, end = start) {
return start + value + end;
}
exports.wrap = wrap;
function unwrap(value, start, end = start) {
if (value.startsWith(start))
value = after(value, start);
if (value.endsWith(end))
value = beforeLast(value, end);
return value;
}
exports.unwrap = unwrap;
function append(value, part) {
return value.concat(part);
}
exports.append = append;
/**
* Prepends the given value to string.
*/
function prepend(value, part) {
return part + value;
}
exports.prepend = prepend;
function endWith(value, part) {
if (value.endsWith(part)) {
return value;
}
else {
return append(value, part);
}
}
exports.endWith = endWith;
function startWith(value, part) {
if (value.startsWith(part)) {
return value;
}
else {
return part + value;
}
}
exports.startWith = startWith;
function limit(value, n, append = "...") {
let truncated = value.slice(0, n);
if (value.length > n) {
return truncated.concat(append);
}
return truncated;
}
exports.limit = limit;
function title(value) {
const words = utils_1.splitWord(value).map(word => word.substring(0, 1).toUpperCase() + word.substring(1));
return words.join(' ');
}
exports.title = title;
function kebab(value) {
return snake(value, '-');
}
exports.kebab = kebab;
function snake(value, replacement = '_') {
return utils_1.splitWord(value).join(replacement).toLowerCase();
}
exports.snake = snake;
function studly(value) {
const words = utils_1.splitWord(value).map(word => word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase());
return words.join('');
}
exports.studly = studly;
function camel(value) {
const studlyCased = studly(value);
if (studlyCased.length === 0)
return studlyCased;
return studlyCased[0].toLowerCase() + studlyCased.substring(1);
}
exports.camel = camel;
function capitalize(value) {
if (value.length === 0)
return value;
return value[0].toUpperCase() + value.substring(1);
}
exports.capitalize = capitalize;
function slug(value, replacement = "-") {
const slug = value
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "") // e.g. è -> e
.replace(/[^a-zA-Z0-9\s]/g, ""); // only keep numbers and alphabet
return snake(slug, replacement);
}
exports.slug = slug;
;